X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.h;h=99e5fc2539410f2c60eed4f2d0992489a2d4e5b7;hb=8196302f8aa6e97dcfafe9d0008ac9c7366d89da;hp=3efcfca28eea18363628a14622f832c8929e17c1;hpb=abc82ce2ef192b8aaf96561eb6ab5a6e62d76108;p=quassel.git diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index 3efcfca2..99e5fc25 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -57,7 +57,8 @@ class CoreNetwork : public Network public: CoreNetwork(const NetworkId &networkid, CoreSession *session); - ~CoreNetwork(); + virtual ~CoreNetwork(); + inline virtual const QMetaObject *syncMetaObject() const { return &Network::staticMetaObject; } inline CoreIdentity *identityPtr() const { return coreSession()->identity(identity()); } @@ -229,6 +230,13 @@ public slots: */ void setPongTimestampValid(bool validTimestamp); + /** + * Indicates that the CoreSession is shutting down. + * + * Disconnects the network if connected, and sets a flag that prevents reconnections. + */ + void shutdown(); + void connectToIrc(bool reconnecting = false); /** * Disconnect from the IRC server. @@ -238,16 +246,14 @@ public slots: * @param requested If true, user requested this disconnect; don't try to reconnect * @param reason Reason for quitting, defaulting to the user-configured quit reason * @param withReconnect Reconnect to the network after disconnecting (e.g. ping timeout) - * @param forceImmediate Immediately disconnect from network, skipping queue of other commands */ - void disconnectFromIrc(bool requested = true, const QString &reason = QString(), - bool withReconnect = false, bool forceImmediate = false); + void disconnectFromIrc(bool requested = true, const QString &reason = QString(), bool withReconnect = false); /** * Forcibly close the IRC server socket, waiting for it to close. * * Call CoreNetwork::disconnectFromIrc() first, allow the event loop to run, then if you need to - * be sure the network's disconencted (e.g. clean-up), call this. + * be sure the network's disconnected (e.g. clean-up), call this. * * @param msecs Maximum time to wait for socket to close, in milliseconds. * @return True if socket closes successfully; false if error occurs or timeout reached @@ -456,7 +462,7 @@ private slots: void socketHasData(); void socketError(QAbstractSocket::SocketError); void socketInitialized(); - inline void socketCloseTimeout() { socket.abort(); } + void socketCloseTimeout(); void socketDisconnected(); void socketStateChanged(QAbstractSocket::SocketState); void networkInitialized(); @@ -527,6 +533,8 @@ private: // This avoids logging a spurious RemoteHostClosedError whenever disconnect is called without // specifying a permanent (saved to core session) disconnect. + bool _shuttingDown{false}; ///< If true, we're shutting down and ignore requests to (dis)connect networks + bool _previousConnectionAttemptFailed; int _lastUsedServerIndex;