X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fnetsplit.h;h=1838c0fc7ac27a9d971a1387ebe4e7df1a21fb1a;hp=e7e644b80d751063d88599a9a34fc9cf1d9d9168;hb=e0781eeb34db0aaa775bd3439c1c98103437f009;hpb=57d23cf77236e4ba25eb2bddb0eb343fe7f5b5df diff --git a/src/core/netsplit.h b/src/core/netsplit.h index e7e644b8..1838c0fc 100644 --- a/src/core/netsplit.h +++ b/src/core/netsplit.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-09 by the Quassel Project * + * Copyright (C) 2005-2013 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,122 +15,129 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef NETSPLIT_H #define NETSPLIT_H -#include #include #include #include #include +class Network; + class Netsplit : public QObject { - Q_OBJECT + Q_OBJECT public: - Netsplit(); - - //! Add a user to the netsplit - /** Call this method if you noticed a netsplit. - * \note This method doesn't check if it really is a netsplit. - * \note Check with isNetsplit(const QString &quitMessage) before calling it! - * - * \param sender The sender string of the quitting user - * \param channels The channels that user shared with us - * \param msg The quit message - */ - void userQuit(const QString &sender, const QStringList &channels, const QString &msg); - - //! Remove a user from the netsplit - /** Call this method if a user joined after a netsplit occured. - - * - * \param sender The sender string of the joined user - * \param channel The channel that user shares with us - * \return true if user was found in the netsplit - */ - bool userJoined(const QString &sender, const QString &channel); - - //! Check if user has joined since netsplit - /** This method shows if a user has already joined after being hit by netsplit - * \note The method doesn't check if the user was recorded in the netsplit! - * - * \param sender The sender string of the user - * \param channel The channel the user shares with us - * \return true if user joined after a netsplit - */ - bool userAlreadyJoined(const QString &sender, const QString &channel); - - //! Add mode to user - /** Use this method to buffer userspecific channel modes until netsplitJoin is emitted. - * - * \param sender The sender string of the user - * \param channel The channel the user shares with us - * \return true if user joined after a netsplit - */ - void addMode(const QString &sender, const QString &channel, const QString &mode); - - //! Check if a string matches the criteria for a netsplit - /** \param quitMessage The message to be checked - * \return true if the message is a netsplit - */ - static bool isNetsplit(const QString &quitMessage); + Netsplit(Network *network, QObject *parent = 0); + + inline Network *network() const { return _network; } + + //! Add a user to the netsplit + /** Call this method if you noticed a netsplit. + * \note This method doesn't check if it really is a netsplit. + * \note Check with isNetsplit(const QString &quitMessage) before calling it! + * + * \param sender The sender string of the quitting user + * \param channels The channels that user shared with us + * \param msg The quit message + */ + void userQuit(const QString &sender, const QStringList &channels, const QString &msg); + + //! Remove a user from the netsplit + /** Call this method if a user joined after a netsplit occured. + * + * \param sender The sender string of the joined user + * \param channel The channel that user shares with us + * \return true if user was found in the netsplit + */ + bool userJoined(const QString &sender, const QString &channel); + + //! Check if user has joined since netsplit + /** This method shows if a user has already joined after being hit by netsplit + * \note The method doesn't check if the user was recorded in the netsplit! + * + * \param sender The sender string of the user + * \param channel The channel the user shares with us + * \return true if user joined after a netsplit + */ + bool userAlreadyJoined(const QString &sender, const QString &channel); + + //! Add mode to user + /** Use this method to buffer userspecific channel modes until netsplitJoin is emitted. + * + * \param sender The sender string of the user + * \param channel The channel the user shares with us + * \return true if user joined after a netsplit + */ + void addMode(const QString &sender, const QString &channel, const QString &mode); + + //! Check if a string matches the criteria for a netsplit + /** \param quitMessage The message to be checked + * \return true if the message is a netsplit + */ + static bool isNetsplit(const QString &quitMessage); signals: - //! A bulk-join of netsplitted users timed out - /** Whenever the internal join-timer times out, we consider the bulk-join to be finished and emit that signal - * for every channel. This is the end of a netsplit. - * \param channel The IRC channel - * \param users A list of all users that joined that channel - * \param modes A list of all modes the users got set after joining again - * \param quitMessage The Quitmessage and thus the servers that got split - */ - void netsplitJoin(const QString &channel, const QStringList &users, const QStringList &modes, const QString &quitMessage); - - //! A (probably bulk-) join of netsplitted users. - /** If users hit by the split joined before the netsplit is considered over, join the users with a normal join. - * \param channel The IRC channel - * \param users A list of all users that joined that channel - * \param modes A list of all modes the users got set after joining again - */ - void earlyJoin(const QString &channel, const QStringList &users, const QStringList &modes); - - //! A bulk-quit of netsplitted users timed out - /** Whenever the internal quit-timer times out, we consider the bulk-quit to be finished and emit that signal - * for every channel. - * \param channel The IRC channel - * \param users A list of all users that quitted in that channel - * \param quitMessage The Quitmessage and thus the servers that got split - */ - void netsplitQuit(const QString &channel, const QStringList &users, const QString &quitMessage); - - //! The Netsplit is considered finished - /** This signal is emitted right after all netsplitJoin signals have been sent or whenever the - * internal timer signals a timeout. - * Simply delete the object and remove it from structures when you receive that signal. - */ - void finished(); + //! A bulk-join of netsplitted users timed out + /** Whenever the internal join-timer times out, we consider the bulk-join to be finished and emit that signal + * for every channel. This is the end of a netsplit. + * \param net The network + * \param channel The IRC channel + * \param users A list of all users that joined that channel + * \param modes A list of all modes the users got set after joining again + * \param quitMessage The Quitmessage and thus the servers that got split + */ + void netsplitJoin(Network *net, const QString &channel, const QStringList &users, const QStringList &modes, const QString &quitMessage); + + //! A (probably bulk-) join of netsplitted users. + /** If users hit by the split joined before the netsplit is considered over, join the users with a normal join. + * \param net The network + * \param channel The IRC channel + * \param users A list of all users that joined that channel + * \param modes A list of all modes the users got set after joining again + */ + void earlyJoin(Network *net, const QString &channel, const QStringList &users, const QStringList &modes); + + //! A bulk-quit of netsplitted users timed out + /** Whenever the internal quit-timer times out, we consider the bulk-quit to be finished and emit that signal + * for every channel. + * \param net The network + * \param channel The IRC channel + * \param users A list of all users that quitted in that channel + * \param quitMessage The Quitmessage and thus the servers that got split + */ + void netsplitQuit(Network *net, const QString &channel, const QStringList &users, const QString &quitMessage); + + //! The Netsplit is considered finished + /** This signal is emitted right after all netsplitJoin signals have been sent or whenever the + * internal timer signals a timeout. + * Simply delete the object and remove it from structures when you receive that signal. + */ + void finished(); private slots: - void joinTimeout(); - void quitTimeout(); + void joinTimeout(); + void quitTimeout(); private: - QString _quitMsg; - // key: channel name - // value: senderstring, list of modes - QHash > _joins; - QHash _quits; - QHash _quitsWithMessageSent; - bool _sentQuit; - QTimer _joinTimer; - QTimer _quitTimer; - QTimer _discardTimer; - int _joinCounter; - int _quitCounter; + Network *_network; + QString _quitMsg; + // key: channel name + // value: senderstring, list of modes + QHash > _joins; + QHash _quits; + QHash _quitsWithMessageSent; + bool _sentQuit; + QTimer _joinTimer; + QTimer _quitTimer; + QTimer _discardTimer; + int _joinCounter; + int _quitCounter; }; + #endif // NETSPLIT_H