* 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; }
+ virtual ~CoreNetwork();
+
inline CoreIdentity *identityPtr() const { return coreSession()->identity(identity()); }
inline CoreSession *coreSession() const { return _coreSession; }
inline QByteArray readChannelCipherKey(const QString &channel) const { return _cipherKeys.value(channel.toLower()); }
inline void storeChannelCipherKey(const QString &channel, const QByteArray &key) { _cipherKeys[channel.toLower()] = key; }
- inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoPending.value(channel.toLower(), 0); }
+ /**
+ * Checks if the given target has an automatic WHO in progress
+ *
+ * @param name Channel or nickname
+ * @return True if an automatic WHO is in progress, otherwise false
+ */
+ inline bool isAutoWhoInProgress(const QString &name) const
+ {
+ return _autoWhoPending.value(name.toLower(), 0);
+ }
inline UserId userId() const { return _coreSession->user(); }
*/
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
* When 'away-notify' is enabled, this will trigger an immediate AutoWho since regular
* who-cycles are disabled as per IRCv3 specifications.
*
- * @param[in] channelOrNick Channel or nickname to WHO
+ * @param[in] name Channel or nickname
*/
- void queueAutoWhoOneshot(const QString &channelOrNick);
+ void queueAutoWhoOneshot(const QString &name);
/**
- * Removes the given channel/nick from AutoWho queue for when it stops existing
- *
- * If not already in queue, nothing happens. This should only be used for nicknames and
- * channels that have suddenly stopped existing (e.g. nick joins then quits).
- *
- * For when a periodic channel AutoWho finishes, see CoreNetwork::setAutoWhoDone()
+ * Checks if the given target has an automatic WHO in progress, and sets it as done if so
*
- * @param channelOrNick Channel or nickname to WHO
+ * @param name Channel or nickname
+ * @return True if an automatic WHO is in progress (and should be silenced), otherwise false
*/
- void cancelAutoWhoOneshot(const QString &channelOrNick);
-
- bool setAutoWhoDone(const QString &channel);
+ bool setAutoWhoDone(const QString &name);
void updateIssuedModes(const QString &requestedModes);
void updatePersistentModes(QString addModes, QString removeModes);
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