Initial import to Git
[profile/ivi/common-api-dbus-runtime.git] / src / CommonAPI / DBus / DBusProxyConnection.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public\r
2  * License, v. 2.0. If a copy of the MPL was not distributed with this\r
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\r
4 #ifndef COMMONAPI_DBUS_DBUS_PROXY_CONNECTION_H_\r
5 #define COMMONAPI_DBUS_DBUS_PROXY_CONNECTION_H_\r
6 \r
7 #include "DBusError.h"\r
8 #include "DBusMessage.h"\r
9 \r
10 #include "DBusFunctionalHash.h"\r
11 #include "DBusServiceStatusEvent.h"\r
12 \r
13 #include <CommonAPI/types.h>\r
14 #include <CommonAPI/Attribute.h>\r
15 #include <CommonAPI/Event.h>\r
16 \r
17 #include <cstdint>\r
18 #include <functional>\r
19 #include <future>\r
20 #include <memory>\r
21 #include <tuple>\r
22 #include <unordered_map>\r
23 #include <utility>\r
24 #include <vector>\r
25 \r
26 namespace CommonAPI {\r
27 namespace DBus {\r
28 \r
29 \r
30 typedef std::function<void(const DBusMessage&)> DBusMessageHandler;\r
31 \r
32 class DBusDaemonProxy;\r
33 class DBusServiceRegistry;\r
34 class DBusObjectManager;\r
35 \r
36 \r
37 class DBusProxyConnection {\r
38  public:\r
39     class DBusMessageReplyAsyncHandler {\r
40      public:\r
41        virtual ~DBusMessageReplyAsyncHandler() { }\r
42        virtual std::future<CallStatus> getFuture() = 0;\r
43        virtual void onDBusMessageReply(const CallStatus&, const DBusMessage&) = 0;\r
44     };\r
45 \r
46     class DBusSignalHandler {\r
47      public:\r
48         virtual ~DBusSignalHandler() { }\r
49         virtual SubscriptionStatus onSignalDBusMessage(const DBusMessage&) = 0;\r
50     };\r
51 \r
52     // objectPath, interfaceName, interfaceMemberName, interfaceMemberSignature\r
53     typedef std::tuple<std::string, std::string, std::string, std::string> DBusSignalHandlerPath;\r
54     typedef std::unordered_multimap<DBusSignalHandlerPath, DBusSignalHandler*> DBusSignalHandlerTable;\r
55     typedef DBusSignalHandlerPath DBusSignalHandlerToken;\r
56 \r
57 \r
58         virtual ~DBusProxyConnection() { }\r
59 \r
60         virtual bool isConnected() const =  0;\r
61 \r
62         virtual bool sendDBusMessage(const DBusMessage& dbusMessage, uint32_t* allocatedSerial = NULL) const = 0;\r
63 \r
64         static const int kDefaultSendTimeoutMs = 100 * 1000;\r
65 \r
66         virtual std::future<CallStatus> sendDBusMessageWithReplyAsync(\r
67                         const DBusMessage& dbusMessage,\r
68                         std::unique_ptr<DBusMessageReplyAsyncHandler> dbusMessageReplyAsyncHandler,\r
69                         int timeoutMilliseconds = kDefaultSendTimeoutMs) const = 0;\r
70 \r
71         virtual DBusMessage sendDBusMessageWithReplyAndBlock(\r
72                         const DBusMessage& dbusMessage,\r
73                         DBusError& dbusError,\r
74                         int timeoutMilliseconds = kDefaultSendTimeoutMs) const = 0;\r
75 \r
76         virtual DBusSignalHandlerToken addSignalMemberHandler(\r
77                         const std::string& objectPath,\r
78                         const std::string& interfaceName,\r
79                         const std::string& interfaceMemberName,\r
80                         const std::string& interfaceMemberSignature,\r
81                         DBusSignalHandler* dbusSignalHandler) = 0;\r
82 \r
83         virtual void removeSignalMemberHandler(const DBusSignalHandlerToken& dbusSignalHandlerToken) = 0;\r
84 \r
85     virtual const std::shared_ptr<DBusDaemonProxy>& getDBusDaemonProxy() = 0;\r
86     virtual const std::shared_ptr<DBusServiceRegistry>& getDBusServiceRegistry() = 0;\r
87     virtual const std::shared_ptr<DBusObjectManager>& getDBusObjectManager() = 0;\r
88 };\r
89 \r
90 \r
91 } // namespace DBus\r
92 } // namespace CommonAPI\r
93 \r
94 #endif //COMMONAPI_DBUS_DBUS_PROXY_CONNECTION_H_\r