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
7 #include "DBusError.h"
\r
8 #include "DBusMessage.h"
\r
10 #include "DBusFunctionalHash.h"
\r
11 #include "DBusServiceStatusEvent.h"
\r
13 #include <CommonAPI/types.h>
\r
14 #include <CommonAPI/Attribute.h>
\r
15 #include <CommonAPI/Event.h>
\r
18 #include <functional>
\r
22 #include <unordered_map>
\r
26 namespace CommonAPI {
\r
30 typedef std::function<void(const DBusMessage&)> DBusMessageHandler;
\r
32 class DBusDaemonProxy;
\r
33 class DBusServiceRegistry;
\r
34 class DBusObjectManager;
\r
37 class DBusProxyConnection {
\r
39 class DBusMessageReplyAsyncHandler {
\r
41 virtual ~DBusMessageReplyAsyncHandler() { }
\r
42 virtual std::future<CallStatus> getFuture() = 0;
\r
43 virtual void onDBusMessageReply(const CallStatus&, const DBusMessage&) = 0;
\r
46 class DBusSignalHandler {
\r
48 virtual ~DBusSignalHandler() { }
\r
49 virtual SubscriptionStatus onSignalDBusMessage(const DBusMessage&) = 0;
\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
58 virtual ~DBusProxyConnection() { }
\r
60 virtual bool isConnected() const = 0;
\r
62 virtual bool sendDBusMessage(const DBusMessage& dbusMessage, uint32_t* allocatedSerial = NULL) const = 0;
\r
64 static const int kDefaultSendTimeoutMs = 100 * 1000;
\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
71 virtual DBusMessage sendDBusMessageWithReplyAndBlock(
\r
72 const DBusMessage& dbusMessage,
\r
73 DBusError& dbusError,
\r
74 int timeoutMilliseconds = kDefaultSendTimeoutMs) const = 0;
\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
83 virtual void removeSignalMemberHandler(const DBusSignalHandlerToken& dbusSignalHandlerToken) = 0;
\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
92 } // namespace CommonAPI
\r
94 #endif //COMMONAPI_DBUS_DBUS_PROXY_CONNECTION_H_
\r