X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.h;h=99e5fc2539410f2c60eed4f2d0992489a2d4e5b7;hb=1e40fc6bc04df8f658f677ca5be4c970f150dc10;hp=740430c5a0f77866c450be8509451ef97aacc3a1;hpb=2d6adaf54681e31b6811decc585069233e8854ef;p=quassel.git diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index 740430c5..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 @@ -401,18 +407,6 @@ public slots: */ void queueAutoWhoOneshot(const QString &name); - /** - * Removes the given channel/nick from AutoWho queue - * - * This can avoid needlessly WHO'ng nicknames and channels that are no longer of interest, e.g. - * if parting a channel right after joining or if a nick joins then quits. - * - * For when a periodic channel AutoWho finishes, see CoreNetwork::setAutoWhoDone() - * - * @param name Channel or nickname - */ - void cancelAutoWhoOneshot(const QString &name); - /** * Checks if the given target has an automatic WHO in progress, and sets it as done if so * @@ -468,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(); @@ -539,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;