add keep alive controll
This commit is contained in:
parent
d23e2dade2
commit
62948a8229
@ -333,8 +333,8 @@ void CloudAuthenticator::refreshTimeout()
|
|||||||
|
|
||||||
void CloudAuthenticator::onSslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
|
void CloudAuthenticator::onSslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
|
||||||
{
|
{
|
||||||
|
// Ignore SSL errors, but inform in the logs
|
||||||
reply->ignoreSslErrors();
|
reply->ignoreSslErrors();
|
||||||
//reply->ignoreSslErrors(QList<QSslError>() << QSslError(QSslError::SelfSignedCertificate) << QSslError(QSslError::CertificateUntrusted) << QSslError(QSslError::HostNameMismatch));
|
|
||||||
|
|
||||||
if (m_refreshTokenRequests.contains(reply)) {
|
if (m_refreshTokenRequests.contains(reply)) {
|
||||||
qCWarning(dcCloud()) << "SSL errors occured for token refresh reply:";
|
qCWarning(dcCloud()) << "SSL errors occured for token refresh reply:";
|
||||||
|
|||||||
@ -32,18 +32,25 @@ CloudConnection::CloudConnection(QObject *parent) :
|
|||||||
m_connected(false),
|
m_connected(false),
|
||||||
m_authenticated(false)
|
m_authenticated(false)
|
||||||
{
|
{
|
||||||
m_proxyUrl = QUrl("ws://127.0.0.1:1212");
|
// If not connected, try to reconnect
|
||||||
m_keystoneUrl = QUrl("http://localhost:8000/oauth2/token");
|
|
||||||
|
|
||||||
m_reconnectionTimer = new QTimer(this);
|
m_reconnectionTimer = new QTimer(this);
|
||||||
m_reconnectionTimer->setSingleShot(false);
|
m_reconnectionTimer->setSingleShot(false);
|
||||||
|
m_reconnectionTimer->setInterval(10000);
|
||||||
connect(m_reconnectionTimer, &QTimer::timeout, this, &CloudConnection::reconnectionTimeout);
|
connect(m_reconnectionTimer, &QTimer::timeout, this, &CloudConnection::reconnectionTimeout);
|
||||||
|
|
||||||
|
// Ping the server to make sure the connection is still alive
|
||||||
m_pingTimer = new QTimer(this);
|
m_pingTimer = new QTimer(this);
|
||||||
m_pingTimer->setSingleShot(false);
|
m_pingTimer->setSingleShot(false);
|
||||||
m_pingTimer->setInterval(30000);
|
m_pingTimer->setInterval(30000);
|
||||||
connect(m_pingTimer, &QTimer::timeout, this, &CloudConnection::onPingTimeout);
|
connect(m_pingTimer, &QTimer::timeout, this, &CloudConnection::onPingTimeout);
|
||||||
|
|
||||||
|
// Timer to check if ping response was received (if not, reconnect the socket)
|
||||||
|
m_pingResponseTimer = new QTimer(this);
|
||||||
|
m_pingResponseTimer->setSingleShot(true);
|
||||||
|
m_pingResponseTimer->setInterval(5000);
|
||||||
|
connect(m_pingResponseTimer, &QTimer::timeout, this, &CloudConnection::onPongTimeout);
|
||||||
|
|
||||||
|
|
||||||
m_connection = new QWebSocket("guhd", QWebSocketProtocol::Version13, this);
|
m_connection = new QWebSocket("guhd", QWebSocketProtocol::Version13, this);
|
||||||
connect(m_connection, SIGNAL(connected()), this, SLOT(onConnected()));
|
connect(m_connection, SIGNAL(connected()), this, SLOT(onConnected()));
|
||||||
connect(m_connection, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
|
connect(m_connection, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
|
||||||
@ -138,7 +145,8 @@ void CloudConnection::onDisconnected()
|
|||||||
|
|
||||||
setConnected(false);
|
setConnected(false);
|
||||||
m_pingTimer->stop();
|
m_pingTimer->stop();
|
||||||
m_reconnectionTimer->start(10000);
|
m_pingResponseTimer->stop();
|
||||||
|
m_reconnectionTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudConnection::onError(const QAbstractSocket::SocketError &error)
|
void CloudConnection::onError(const QAbstractSocket::SocketError &error)
|
||||||
@ -166,9 +174,10 @@ void CloudConnection::onError(const QAbstractSocket::SocketError &error)
|
|||||||
qCWarning(dcCloud()) << "Websocket error:" << error << m_connection->errorString();
|
qCWarning(dcCloud()) << "Websocket error:" << error << m_connection->errorString();
|
||||||
|
|
||||||
m_connection->close();
|
m_connection->close();
|
||||||
|
setConnected(false);
|
||||||
m_error = Cloud::CloudErrorProxyServerNotReachable;
|
m_error = Cloud::CloudErrorProxyServerNotReachable;
|
||||||
m_pingTimer->start();
|
m_pingTimer->stop();
|
||||||
m_reconnectionTimer->start(10000);
|
m_reconnectionTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudConnection::onPingTimeout()
|
void CloudConnection::onPingTimeout()
|
||||||
@ -177,13 +186,21 @@ void CloudConnection::onPingTimeout()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_connection->ping("Ping");
|
m_connection->ping("Ping");
|
||||||
|
m_pingResponseTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudConnection::onPong(const quint64 elapsedTime, const QByteArray &payload)
|
void CloudConnection::onPong(const quint64 elapsedTime, const QByteArray &payload)
|
||||||
{
|
{
|
||||||
Q_UNUSED(elapsedTime);
|
Q_UNUSED(elapsedTime);
|
||||||
Q_UNUSED(payload);
|
Q_UNUSED(payload);
|
||||||
//qCDebug(dcCloud()) << payload << elapsedTime;
|
m_pingResponseTimer->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CloudConnection::onPongTimeout()
|
||||||
|
{
|
||||||
|
qCWarning(dcCloud()) << "Pong timeout: did not get a ping response from the server (after 5s): reconnecting to the server...";
|
||||||
|
disconnectFromCloud();
|
||||||
|
connectToCloud();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudConnection::onStateChanged(const QAbstractSocket::SocketState &state)
|
void CloudConnection::onStateChanged(const QAbstractSocket::SocketState &state)
|
||||||
@ -196,6 +213,7 @@ void CloudConnection::reconnectionTimeout()
|
|||||||
if (m_authenticated) {
|
if (m_authenticated) {
|
||||||
m_connection->open(m_proxyUrl);
|
m_connection->open(m_proxyUrl);
|
||||||
} else {
|
} else {
|
||||||
|
m_authenticator->startAuthentication();
|
||||||
m_reconnectionTimer->stop();
|
m_reconnectionTimer->stop();
|
||||||
m_error = CloudConnectionErrorAuthenticationFailed;
|
m_error = CloudConnectionErrorAuthenticationFailed;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,6 +67,7 @@ private:
|
|||||||
|
|
||||||
QTimer *m_reconnectionTimer;
|
QTimer *m_reconnectionTimer;
|
||||||
QTimer *m_pingTimer;
|
QTimer *m_pingTimer;
|
||||||
|
QTimer *m_pingResponseTimer;
|
||||||
|
|
||||||
QUrl m_proxyUrl;
|
QUrl m_proxyUrl;
|
||||||
QUrl m_keystoneUrl;
|
QUrl m_keystoneUrl;
|
||||||
@ -92,6 +93,7 @@ private slots:
|
|||||||
void onStateChanged(const QAbstractSocket::SocketState &state);
|
void onStateChanged(const QAbstractSocket::SocketState &state);
|
||||||
void onPingTimeout();
|
void onPingTimeout();
|
||||||
void onPong(const quint64 elapsedTime, const QByteArray &payload);
|
void onPong(const quint64 elapsedTime, const QByteArray &payload);
|
||||||
|
void onPongTimeout();
|
||||||
|
|
||||||
void reconnectionTimeout();
|
void reconnectionTimeout();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user