Simplify and fix (re)connection logic
[quassel.git] / src / client / coreconnection.h
index 0b64e9b..0bf402e 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2012 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  *
 #endif
 
 #include "coreaccount.h"
+#include "remotepeer.h"
 #include "types.h"
 
 class CoreAccountModel;
+class InternalPeer;
 class Network;
+class Peer;
 class SignalProxy;
 
 class CoreConnection : public QObject
@@ -60,23 +63,23 @@ public:
 
     void init();
 
-    inline bool isConnected() const;
-    inline ConnectionState state() const;
-    inline CoreAccount currentAccount() const;
+    bool isConnected() const;
+    ConnectionState state() const;
+    CoreAccount currentAccount() const;
 
     bool isEncrypted() const;
     bool isLocalConnection() const;
 
-    inline int progressMinimum() const;
-    inline int progressMaximum() const;
-    inline int progressValue() const;
-    inline QString progressText() const;
+    int progressMinimum() const;
+    int progressMaximum() const;
+    int progressValue() const;
+    QString progressText() const;
 
     //! Check if we consider the last connect as reconnect
-    inline bool wasReconnect() const { return _wasReconnect; }
+    bool wasReconnect() const { return _wasReconnect; }
 
 #ifdef HAVE_SSL
-    inline const QSslSocket *sslSocket() const;
+    const QSslSocket *sslSocket() const;
 #endif
 
 public slots:
@@ -105,7 +108,7 @@ signals:
     void coreSetupFailed(const QString &error);
 
     void startInternalCore();
-    void connectToInternalCore(SignalProxy *proxy);
+    void connectToInternalCore(InternalPeer *connection);
 
     // These signals MUST be handled synchronously!
     void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage = QString());
@@ -121,7 +124,7 @@ private slots:
 
     void socketStateChanged(QAbstractSocket::SocketState);
     void coreSocketError(QAbstractSocket::SocketError);
-    void coreHasData();
+    void coreHasData(const QVariant &item);
     void coreSocketConnected();
     void coreSocketDisconnected();
 
@@ -173,12 +176,13 @@ private:
     CoreAccount _account;
     QVariantMap _coreMsgBuffer;
 
-    QPointer<QAbstractSocket> _socket;
-    quint32 _blockSize;
+    QPointer<QTcpSocket> _socket;
+    QPointer<Peer> _peer;
     ConnectionState _state;
 
     QTimer _reconnectTimer;
     bool _wantReconnect;
+    bool _wasReconnect;
 
     QSet<QObject *> _netsToSync;
     int _numNetsToSync;
@@ -186,8 +190,7 @@ private:
     QString _progressText;
 
     QString _coreInfoString(const QVariantMap &);
-    bool _wasReconnect;
-    bool _requestedDisconnect;
+    bool _resetting;
 
     inline CoreAccountModel *accountModel() const;
 
@@ -198,18 +201,18 @@ private:
 Q_DECLARE_METATYPE(CoreConnection::ConnectionState)
 
 // Inlines
-int CoreConnection::progressMinimum() const { return _progressMinimum; }
-int CoreConnection::progressMaximum() const { return _progressMaximum; }
-int CoreConnection::progressValue() const { return _progressValue; }
-QString CoreConnection::progressText() const { return _progressText; }
+inline int CoreConnection::progressMinimum() const { return _progressMinimum; }
+inline int CoreConnection::progressMaximum() const { return _progressMaximum; }
+inline int CoreConnection::progressValue() const { return _progressValue; }
+inline QString CoreConnection::progressText() const { return _progressText; }
 
-CoreConnection::ConnectionState CoreConnection::state() const { return _state; }
-bool CoreConnection::isConnected() const { return state() >= Connected; }
-CoreAccount CoreConnection::currentAccount() const { return _account; }
-CoreAccountModel *CoreConnection::accountModel() const { return _model; }
+inline CoreConnection::ConnectionState CoreConnection::state() const { return _state; }
+inline bool CoreConnection::isConnected() const { return state() >= Connected; }
+inline CoreAccount CoreConnection::currentAccount() const { return _account; }
+inline CoreAccountModel *CoreConnection::accountModel() const { return _model; }
 
 #ifdef HAVE_SSL
-const QSslSocket *CoreConnection::sslSocket() const { return qobject_cast<QSslSocket *>(_socket); }
+inline const QSslSocket *CoreConnection::sslSocket() const { return qobject_cast<QSslSocket *>(_socket); }
 #endif
 
 #endif