* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef CORENETWORK_H
-#define CORENETWORK_H
+#pragma once
#include "network.h"
#include "coreircchannel.h"
class CoreNetwork : public Network
{
- SYNCABLE_OBJECT
- Q_OBJECT
+ Q_OBJECT
public:
CoreNetwork(const NetworkId &networkid, CoreSession *session);
- ~CoreNetwork();
- inline virtual const QMetaObject *syncMetaObject() const { return &Network::staticMetaObject; }
+ ~CoreNetwork() override;
inline CoreIdentity *identityPtr() const { return coreSession()->identity(identity()); }
inline CoreSession *coreSession() const { return _coreSession; }
};
public slots:
- virtual void setMyNick(const QString &mynick);
+ void setMyNick(const QString &mynick) override;
- virtual void requestConnect() const;
- virtual void requestDisconnect() const;
- virtual void requestSetNetworkInfo(const NetworkInfo &info);
+ void requestConnect() const override;
+ void requestDisconnect() const override;
+ void requestSetNetworkInfo(const NetworkInfo &info) override;
- virtual void setUseAutoReconnect(bool);
- virtual void setAutoReconnectInterval(quint32);
- virtual void setAutoReconnectRetries(quint16);
+ void setUseAutoReconnect(bool) override;
+ void setAutoReconnectInterval(quint32) override;
+ void setAutoReconnectRetries(quint16) override;
void setPingInterval(int interval);
*/
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.
* @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
*/
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
*
void socketDisconnected(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort, qint64 socketId);
protected:
- inline virtual IrcChannel *ircChannelFactory(const QString &channelname) { return new CoreIrcChannel(channelname, this); }
- inline virtual IrcUser *ircUserFactory(const QString &hostmask) { return new CoreIrcUser(hostmask, this); }
+ inline IrcChannel *ircChannelFactory(const QString &channelname) override { return new CoreIrcChannel(channelname, this); }
+ inline IrcUser *ircUserFactory(const QString &hostmask) override { return new CoreIrcUser(hostmask, this); }
protected slots:
// TODO: remove cached cipher keys, when appropriate
void socketHasData();
void socketError(QAbstractSocket::SocketError);
void socketInitialized();
- inline void socketCloseTimeout() { socket.abort(); }
+ void socketCloseTimeout();
void socketDisconnected();
void socketStateChanged(QAbstractSocket::SocketState);
void networkInitialized();
// 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;
// List of blowfish keys for channels
QHash<QString, QByteArray> _cipherKeys;
};
-
-
-#endif //CORENETWORK_H