diff options
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;
+}
|
