From 2d3aee65a5d59f87dcfd05b73cde6456bf504582 Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Sat, 5 Sep 2009 09:57:09 +0000 Subject: Reconnection mechanism --- source/QXmppReconnectionManager.cpp | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 source/QXmppReconnectionManager.cpp (limited to 'source/QXmppReconnectionManager.cpp') diff --git a/source/QXmppReconnectionManager.cpp b/source/QXmppReconnectionManager.cpp new file mode 100644 index 00000000..b7b07c16 --- /dev/null +++ b/source/QXmppReconnectionManager.cpp @@ -0,0 +1,59 @@ +#include "QXmppReconnectionManager.h" +#include "QXmppClient.h" +#include "utils.h" + +QXmppReconnectionManager::QXmppReconnectionManager(QXmppClient* client):m_timer(this), + m_reconnectionTries(0), m_client(client), QObject(client) +{ + m_timer.setSingleShot(true); + bool check = connect(&m_timer, SIGNAL(timeout()), SLOT(reconnect())); + Q_ASSERT(check); +} + +void QXmppReconnectionManager::connected() +{ + m_reconnectionTries = 0; +} + +void QXmppReconnectionManager::error(QXmppClient::Error error) +{ + if(m_client && error == QXmppClient::SocketError) + { + int time = getNextReconnectingInTime(); + + // time is in sec + m_timer.start(time*1000); + emit reconnectingIn(time); + } +} + +int QXmppReconnectionManager::getNextReconnectingInTime() +{ + int reconnectingIn; + if(m_reconnectionTries < 5) + reconnectingIn = 10; + else if(m_reconnectionTries < 10) + reconnectingIn = 20; + else if(m_reconnectionTries < 15) + reconnectingIn = 40; + else + reconnectingIn = 60; + + return reconnectingIn; +} + +void QXmppReconnectionManager::reconnect() +{ + if(m_client) + { + log(QString("QXmppReconnectionManager::reconnect()")); + emit reconnectingNow(); + m_client->connectToServer(m_client->getConfiguration()); + } +} + +void QXmppReconnectionManager::cancelReconnection() +{ + m_timer.stop(); + m_reconnectionTries = 0; +} -- cgit v1.2.3