summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Seigo <aseigo@kde.org>2014-11-21 13:24:40 +0100
committerAaron Seigo <aseigo@kde.org>2014-11-21 13:24:40 +0100
commit0b2fdc4b734319bdeb9df6ad1420e75cea28b22e (patch)
tree04c08a7d96cb45ec663031d975cd1e80194ce26f
parent58776c2732a5005cfa2939f25b7b235d8e3344af (diff)
downloadsink-0b2fdc4b734319bdeb9df6ad1420e75cea28b22e.tar.gz
sink-0b2fdc4b734319bdeb9df6ad1420e75cea28b22e.zip
use a timer to control the re-connect process
-rw-r--r--client/resourceaccess.cpp23
-rw-r--r--client/resourceaccess.h2
2 files changed, 14 insertions, 11 deletions
diff --git a/client/resourceaccess.cpp b/client/resourceaccess.cpp
index 1eadc34..d3d8175 100644
--- a/client/resourceaccess.cpp
+++ b/client/resourceaccess.cpp
@@ -9,8 +9,14 @@ ResourceAccess::ResourceAccess(const QString &resourceName, QObject *parent)
9 : QObject(parent), 9 : QObject(parent),
10 m_resourceName(resourceName), 10 m_resourceName(resourceName),
11 m_socket(new QLocalSocket(this)), 11 m_socket(new QLocalSocket(this)),
12 m_tryOpenTimer(new QTimer(this)),
12 m_startingProcess(false) 13 m_startingProcess(false)
13{ 14{
15 m_tryOpenTimer->setInterval(50);
16 m_tryOpenTimer->setSingleShot(true);
17 connect(m_tryOpenTimer, &QTimer::timeout,
18 this, &ResourceAccess::open);
19
14 Console::main()->log(QString("Starting access to %1").arg(m_socket->serverName())); 20 Console::main()->log(QString("Starting access to %1").arg(m_socket->serverName()));
15 connect(m_socket, &QLocalSocket::connected, 21 connect(m_socket, &QLocalSocket::connected,
16 this, &ResourceAccess::connected); 22 this, &ResourceAccess::connected);
@@ -37,17 +43,8 @@ bool ResourceAccess::isReady() const
37 43
38void ResourceAccess::open() 44void ResourceAccess::open()
39{ 45{
40 static int count = 0;
41 if (m_startingProcess) {
42 QMetaObject::invokeMethod(this, "open", Qt::QueuedConnection);
43 }
44
45 if (m_socket->isValid()) { 46 if (m_socket->isValid()) {
46 return; 47 Console::main()->log("Socket valid, so aborting the open");
47 }
48
49 ++count;
50 if (count > 10000) {
51 return; 48 return;
52 } 49 }
53 50
@@ -72,15 +69,19 @@ void ResourceAccess::connected()
72 69
73void ResourceAccess::disconnected() 70void ResourceAccess::disconnected()
74{ 71{
72 m_socket->close();
75 Console::main()->log(QString("Disconnected: %1").arg(m_socket->fullServerName())); 73 Console::main()->log(QString("Disconnected: %1").arg(m_socket->fullServerName()));
76 emit ready(false); 74 emit ready(false);
75 open();
77} 76}
78 77
79void ResourceAccess::connectionError(QLocalSocket::LocalSocketError error) 78void ResourceAccess::connectionError(QLocalSocket::LocalSocketError error)
80{ 79{
81 Console::main()->log(QString("Could not connect to %1 due to error %2").arg(m_socket->serverName()).arg(error)); 80 Console::main()->log(QString("Could not connect to %1 due to error %2").arg(m_socket->serverName()).arg(error));
82 if (m_startingProcess) { 81 if (m_startingProcess) {
83 QMetaObject::invokeMethod(this, "open", Qt::QueuedConnection); 82 if (!m_tryOpenTimer->isActive()) {
83 m_tryOpenTimer->start();
84 }
84 return; 85 return;
85 } 86 }
86 87
diff --git a/client/resourceaccess.h b/client/resourceaccess.h
index f4c4ad4..53b46c5 100644
--- a/client/resourceaccess.h
+++ b/client/resourceaccess.h
@@ -2,6 +2,7 @@
2 2
3#include <QLocalSocket> 3#include <QLocalSocket>
4#include <QObject> 4#include <QObject>
5#include <QTimer>
5 6
6class ResourceAccess : public QObject 7class ResourceAccess : public QObject
7{ 8{
@@ -29,5 +30,6 @@ private Q_SLOTS:
29private: 30private:
30 QString m_resourceName; 31 QString m_resourceName;
31 QLocalSocket *m_socket; 32 QLocalSocket *m_socket;
33 QTimer *m_tryOpenTimer;
32 bool m_startingProcess; 34 bool m_startingProcess;
33}; 35};