X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fcoreconnection.cpp;h=7112b85468e5312dd7163a0a7d4c8e5699206c55;hp=fb553fec06481a4b196d2c154193e64436be9e6c;hb=5d99995ceee2fb9a5291d470e36319319b345276;hpb=9fc57dc2c000e80fb8bd746a090e2e8210e1278e diff --git a/src/client/coreconnection.cpp b/src/client/coreconnection.cpp index fb553fec..7112b854 100644 --- a/src/client/coreconnection.cpp +++ b/src/client/coreconnection.cpp @@ -42,11 +42,10 @@ CoreConnection::CoreConnection(CoreAccountModel *model, 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); @@ -289,8 +287,8 @@ void CoreConnection::coreSocketError(QAbstractSocket::SocketError) void CoreConnection::coreSocketDisconnected() { - _wasReconnect = !_requestedDisconnect; - resetConnection(true); + _wasReconnect = false; + resetConnection(_wantReconnect); // FIXME handle disconnects gracefully } @@ -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")); @@ -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()); + } }