03207d5828f85ee17eda5d746f96067da4c64b59
[yandex-traffic] / connection.cpp
1 #include <QtDBus>
2
3 #include "connection.hpp"
4 #include "icd2_light.h"
5
6
7 static ConnectionChecker *_instance = NULL;
8
9
10 // --------------------------------------------------
11 // ConnectionChecker singleton
12 // --------------------------------------------------
13 ConnectionChecker *ConnectionChecker::instance ()
14 {
15     if (!_instance)
16         _instance = new ConnectionChecker;
17     return _instance;
18 }
19
20
21 ConnectionChecker::ConnectionChecker ()
22     : _bus (QDBusConnection::systemBus ())
23 {
24     _connected = true;
25
26     _itf = new QDBusInterface (ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, _bus);
27     _bus.connect (ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, ICD_DBUS_API_STATE_SIG,
28                   this, SLOT (stateSignal (const QDBusMessage&)));
29
30     requestState ();
31 }
32
33
34 void ConnectionChecker::requestState ()
35 {
36     QDBusMessage msg = QDBusMessage::createSignal (ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, ICD_DBUS_API_STATE_REQ);
37
38     _bus.send (msg);
39 }
40
41
42 void ConnectionChecker::stateSignal (const QDBusMessage& msg)
43 {
44     unsigned int status = msg.arguments ().value (7).value<unsigned int>();
45
46     if (status == ICD_STATE_CONNECTED) {
47         if (!_connected) {
48             _connected = true;
49             emit connected (true);
50         }
51     }
52     else {
53         if (_connected) {
54             _connected = false;
55             emit connected (false);
56         }
57     }
58 }