_model(model),
_state(Disconnected),
_wantReconnect(false),
+ _wasReconnect(false),
_progressMinimum(0),
_progressMaximum(-1),
_progressValue(-1),
- _wasReconnect(false),
- _requestedDisconnect(false),
_resetting(false)
{
qRegisterMetaType<ConnectionState>("CoreConnection::ConnectionState");
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);
void CoreConnection::coreSocketDisconnected()
{
- _wasReconnect = !_requestedDisconnect;
- resetConnection(true);
+ _wasReconnect = false;
+ resetConnection(_wantReconnect);
// FIXME handle disconnects gracefully
}
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"));
_socket = 0;
}
- _requestedDisconnect = false;
-
_coreMsgBuffer.clear();
_netsToSync.clear();
_numNetsToSync = 0;
void CoreConnection::reconnectToCore()
{
- if (currentAccount().isValid())
+ if (currentAccount().isValid()) {
+ _wasReconnect = true;
connectToCore(currentAccount().accountId());
+ }
}