aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppReconnectionManager.cpp
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-05 09:57:09 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2009-09-05 09:57:09 +0000
commit2d3aee65a5d59f87dcfd05b73cde6456bf504582 (patch)
tree39f6a6c9ba33a2de484115da5a822146dd0a5a93 /source/QXmppReconnectionManager.cpp
parentd2983aecee07161aba43ccd58ebbe50c9755641d (diff)
downloadqxmpp-2d3aee65a5d59f87dcfd05b73cde6456bf504582.tar.gz
Reconnection mechanism
Diffstat (limited to 'source/QXmppReconnectionManager.cpp')
-rw-r--r--source/QXmppReconnectionManager.cpp59
1 files changed, 59 insertions, 0 deletions
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;
+}