X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fcoreconnection.cpp;h=7112b85468e5312dd7163a0a7d4c8e5699206c55;hp=8fc5c5153afa262fa6bb915d3be129d16388dc72;hb=5d99995ceee2fb9a5291d470e36319319b345276;hpb=4a5065255e652dd0c301bac0db41b7afb777ef49 diff --git a/src/client/coreconnection.cpp b/src/client/coreconnection.cpp index 8fc5c515..7112b854 100644 --- a/src/client/coreconnection.cpp +++ b/src/client/coreconnection.cpp @@ -28,25 +28,24 @@ #include "clientsettings.h" #include "coreaccountmodel.h" #include "identity.h" -#include "internalconnection.h" +#include "internalpeer.h" #include "network.h" #include "networkmodel.h" #include "quassel.h" #include "signalproxy.h" #include "util.h" -#include "protocols/legacy/legacyconnection.h" +#include "protocols/legacy/legacypeer.h" CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent) : QObject(parent), _model(model), _state(Disconnected), _wantReconnect(false), + _wasReconnect(false), _progressMinimum(0), _progressMaximum(-1), _progressValue(-1), - _wasReconnect(false), - _requestedDisconnect(false), _resetting(false) { qRegisterMetaType("CoreConnection::ConnectionState"); @@ -56,7 +55,6 @@ CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent) void CoreConnection::init() { Client::signalProxy()->setHeartBeatInterval(30); - connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected())); connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), SIGNAL(lagUpdated(int))); _reconnectTimer.setSingleShot(true); @@ -123,7 +121,7 @@ void CoreConnection::updateProgress(int value, int max) void CoreConnection::reconnectTimeout() { - if (!_connection) { + if (!_peer) { CoreConnectionSettings s; if (_wantReconnect && s.autoReconnect()) { #ifdef HAVE_KDE @@ -201,7 +199,7 @@ void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status) bool CoreConnection::isEncrypted() const { - return _connection && _connection->isSecure(); + return _peer && _peer->isSecure(); } @@ -211,7 +209,7 @@ bool CoreConnection::isLocalConnection() const return false; if (currentAccount().isInternal()) return true; - if (_connection->isLocal()) + if (_peer->isLocal()) return true; return false; @@ -289,8 +287,8 @@ void CoreConnection::coreSocketError(QAbstractSocket::SocketError) void CoreConnection::coreSocketDisconnected() { - _wasReconnect = !_requestedDisconnect; - resetConnection(true); + _wasReconnect = false; + resetConnection(_wantReconnect); // FIXME handle disconnects gracefully } @@ -331,10 +329,10 @@ void CoreConnection::coreHasData(const QVariant &item) // if the connection is an orphan, the signalProxy adopts it. // -> we don't need to care about it anymore - disconnect(_connection, 0, this, 0); + disconnect(_peer, 0, this, 0); - _connection->setParent(0); - Client::signalProxy()->addPeer(_connection); + _peer->setParent(0); + Client::signalProxy()->addPeer(_peer); sessionStateReceived(msg["SessionState"].toMap()); } @@ -347,21 +345,23 @@ void CoreConnection::coreHasData(const QVariant &item) void CoreConnection::disconnectFromCore() { - if (_socket) { - _requestedDisconnect = true; + if (_socket) disconnectFromCore(QString(), false); // requested disconnect, so don't try to reconnect - } } void CoreConnection::disconnectFromCore(const QString &errorString, bool wantReconnect) { - if (!wantReconnect) + if (wantReconnect) + _reconnectTimer.start(); + else _reconnectTimer.stop(); - _wasReconnect = wantReconnect; // store if disconnect was requested + _wantReconnect = wantReconnect; // store if disconnect was requested + _wasReconnect = false; - resetConnection(wantReconnect); + if (_socket) + _socket->close(); if (errorString.isEmpty()) emit connectionError(tr("Disconnected")); @@ -378,15 +378,15 @@ void CoreConnection::resetConnection(bool wantReconnect) _wantReconnect = wantReconnect; - if (_connection) { + if (_peer) { disconnect(_socket, 0, this, 0); - disconnect(_connection, 0, this, 0); - _connection->close(); + disconnect(_peer, 0, this, 0); + _peer->close(); - if (_connection->parent() == this) - _connection->deleteLater(); // if it's not us, it belongs to the sigproxy which will delete it + if (_peer->parent() == this) + _peer->deleteLater(); // if it's not us, it belongs to the sigproxy which will delete it _socket = 0; // socket is owned and will be deleted by RemoteConnection - _connection = 0; + _peer = 0; } else if (_socket) { disconnect(_socket, 0, this, 0); @@ -394,8 +394,6 @@ void CoreConnection::resetConnection(bool wantReconnect) _socket = 0; } - _requestedDisconnect = false; - _coreMsgBuffer.clear(); _netsToSync.clear(); _numNetsToSync = 0; @@ -419,8 +417,10 @@ void CoreConnection::resetConnection(bool wantReconnect) void CoreConnection::reconnectToCore() { - if (currentAccount().isValid()) + if (currentAccount().isValid()) { + _wasReconnect = true; connectToCore(currentAccount().accountId()); + } } @@ -475,9 +475,9 @@ void CoreConnection::connectToCurrentAccount() } emit startInternalCore(); - InternalConnection *conn = new InternalConnection(); - Client::instance()->signalProxy()->addPeer(conn); // sigproxy will take ownership - emit connectToInternalCore(conn); + InternalPeer *peer = new InternalPeer(); + Client::instance()->signalProxy()->addPeer(peer); // sigproxy will take ownership + emit connectToInternalCore(peer); return; } @@ -525,10 +525,10 @@ void CoreConnection::connectToCurrentAccount() void CoreConnection::coreSocketConnected() { // Create the connection which will handle the incoming data - Q_ASSERT(!_connection); - _connection = new LegacyConnection(_socket, this); - connect(_connection, SIGNAL(dataReceived(QVariant)), SLOT(coreHasData(QVariant))); - connect(_connection, SIGNAL(transferProgress(int,int)), SLOT(updateProgress(int,int))); + Q_ASSERT(!_peer); + _peer = new LegacyPeer(_socket, this); + connect(_peer, SIGNAL(dataReceived(QVariant)), SLOT(coreHasData(QVariant))); + connect(_peer, SIGNAL(transferProgress(int,int)), SLOT(updateProgress(int,int))); // Phase One: Send client info and wait for core info @@ -546,7 +546,7 @@ void CoreConnection::coreSocketConnected() clientInit["UseCompression"] = false; #endif - qobject_cast(_connection)->writeSocketData(clientInit); + qobject_cast(_peer)->writeSocketData(clientInit); } @@ -695,7 +695,7 @@ void CoreConnection::loginToCore(const QString &prevError) clientLogin["MsgType"] = "ClientLogin"; clientLogin["User"] = currentAccount().user(); clientLogin["Password"] = currentAccount().password(); - qobject_cast(_connection)->writeSocketData(clientLogin); + qobject_cast(_peer)->writeSocketData(clientLogin); } @@ -809,5 +809,5 @@ void CoreConnection::doCoreSetup(const QVariant &setupData) QVariantMap setup; setup["MsgType"] = "CoreSetupData"; setup["SetupData"] = setupData; - qobject_cast(_connection)->writeSocketData(setup); + qobject_cast(_peer)->writeSocketData(setup); }