diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-09-05 09:57:09 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2009-09-05 09:57:09 +0000 |
| commit | 2d3aee65a5d59f87dcfd05b73cde6456bf504582 (patch) | |
| tree | 39f6a6c9ba33a2de484115da5a822146dd0a5a93 /source/QXmppReconnectionManager.cpp | |
| parent | d2983aecee07161aba43ccd58ebbe50c9755641d (diff) | |
| download | qxmpp-2d3aee65a5d59f87dcfd05b73cde6456bf504582.tar.gz | |
Reconnection mechanism
Diffstat (limited to 'source/QXmppReconnectionManager.cpp')
| -rw-r--r-- | source/QXmppReconnectionManager.cpp | 59 |
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;
+}
|
