tackeling 30 sec ping timeout issues
[quassel.git] / src / core / corenetwork.h
index f088707..dbb8a5e 100644 (file)
@@ -75,7 +75,7 @@ public:
 
   inline QString channelKey(const QString &channel) const { return _channelKeys.value(channel.toLower(), QString()); }
 
-  inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoInProgress.value(channel.toLower(), 0); }
+  inline bool isAutoWhoInProgress(const QString &channel) const { return _autoWhoPending.value(channel.toLower(), 0); }
 
   inline UserId userId() const { return _coreSession->user(); }
 
@@ -91,7 +91,7 @@ public slots:
   virtual void setAutoReconnectRetries(quint16);
 
   void connectToIrc(bool reconnecting = false);
-  void disconnectFromIrc(bool requested = true, const QString &reason = QString());
+  void disconnectFromIrc(bool requested = true, const QString &reason = QString(), bool withReconnect = false);
 
   void userInput(BufferInfo bufferInfo, QString msg);
   void putRawLine(QByteArray input);
@@ -106,10 +106,16 @@ public slots:
 
   Server usedServer() const;
 
+  inline void resetPingTimeout() { _pingCount = 0; }
+
+  inline void displayMsg(Message::Type msgType, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None) {
+    emit displayMsg(networkId(), msgType, bufferType, target, text, sender, flags);
+  }
+
 signals:
   void recvRawServerMsg(QString);
   void displayStatusMsg(QString);
-  void displayMsg(Message::Type, BufferInfo::Type, QString target, QString text, QString sender = "", Message::Flags flags = Message::None);
+  void displayMsg(NetworkId, Message::Type, BufferInfo::Type, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None);
   void disconnected(NetworkId networkId);
   void connectionError(const QString &errorMsg);
 
@@ -129,8 +135,11 @@ private slots:
   void networkInitialized();
 
   void sendPerform();
+  void restoreUserModes();
   void doAutoReconnect();
   void sendPing();
+  void enablePingTimeout();
+  void disablePingTimeout();
   void sendAutoWho();
   void startAutoWhoCycle();
 
@@ -166,15 +175,19 @@ private:
    * it is needed to determine whether or not the connection needs to be
    * in the automatic session restore. */
   bool _quitRequested;
+  QString _quitReason;
 
   bool _previousConnectionAttemptFailed;
   int _lastUsedServerIndex;
 
   QTimer _pingTimer;
+  uint _lastPingTime;
+  uint _maxPingCount;
+  uint _pingCount;
 
   bool _autoWhoEnabled;
   QStringList _autoWhoQueue;
-  QHash<QString, int> _autoWhoInProgress;
+  QHash<QString, int> _autoWhoPending;
   int _autoWhoInterval;
   int _autoWhoNickLimit;
   int _autoWhoDelay;