1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #ifndef COMMONAPI_DBUS_DBUS_PROXY_H_
5 #define COMMONAPI_DBUS_DBUS_PROXY_H_
7 #include "DBusProxyConnection.h"
8 #include "DBusAttribute.h"
10 #include <CommonAPI/Proxy.h>
11 #include <CommonAPI/types.h>
22 typedef Event<AvailabilityStatus> ProxyStatusEvent;
24 class DBusProxyStatusEvent: public ProxyStatusEvent {
26 DBusProxyStatusEvent(DBusProxy* dbusProxy);
28 void onFirstListenerAdded(const Listener& listener);
29 void onLastListenerRemoved(const Listener& listener);
31 Subscription subscribe(Listener listener);
34 SubscriptionStatus onServiceAvailableSignalHandler(const std::string& name, const AvailabilityStatus& availabilityStatus);
36 DBusProxy* dbusProxy_;
37 DBusServiceStatusEvent::Subscription subscription_;
39 friend class DBusProxy;
44 class DBusProxy: public virtual CommonAPI::Proxy {
46 DBusProxy(const std::string& dbusBusName,
47 const std::string& dbusObjectPath,
48 const std::string& interfaceName,
49 const std::shared_ptr<DBusProxyConnection>& dbusProxyConnection);
51 virtual std::string getAddress() const;
52 virtual const std::string& getDomain() const;
53 virtual const std::string& getServiceId() const;
54 virtual const std::string& getInstanceId() const;
55 virtual bool isAvailable() const;
56 virtual bool isAvailableBlocking() const;
57 virtual ProxyStatusEvent& getProxyStatusEvent();
58 virtual InterfaceVersionAttribute& getInterfaceVersionAttribute();
60 inline const std::string& getDBusBusName() const;
61 inline const std::string& getDBusObjectPath() const;
62 inline const std::string& getInterfaceName() const;
63 inline const std::shared_ptr<DBusProxyConnection>& getDBusConnection() const;
65 DBusMessage createMethodCall(const char* methodName,
66 const char* methodSignature = NULL) const;
68 inline DBusProxyConnection::DBusSignalHandlerToken addSignalMemberHandler(
69 const std::string& signalName,
70 const std::string& signalSignature,
71 DBusProxyConnection::DBusSignalHandler* dbusSignalHandler);
73 inline void removeSignalMemberHandler(const DBusProxyConnection::DBusSignalHandlerToken& dbusSignalHandlerToken);
76 DBusProxy(const DBusProxy& abstractProxy) = delete;
78 DBusProxy(const std::string& busName,
79 const std::string& objectId,
80 const std::string& interfaceName,
81 const std::shared_ptr<DBusProxyConnection>& connection,
82 const bool isAlwaysAvailable);
84 virtual void getOwnVersion(uint16_t& ownVersionMajor, uint16_t& ownVersionMinor) const = 0;
86 DBusProxyStatusEvent statusEvent_;
87 DBusProxyStatusEvent::Subscription remoteStatusSubscription_;
90 void onServiceAlive(bool alive);
92 const std::string dbusBusName_;
93 const std::string dbusObjectPath_;
94 const std::string interfaceName_;
96 mutable bool available_;
97 mutable bool availableSet_;
99 std::shared_ptr<DBusProxyConnection> connection_;
101 DBusReadonlyAttribute<InterfaceVersionAttribute> interfaceVersionAttribute_;
103 static const std::string domain_;
105 friend class DBusProxyStatusEvent;
108 const std::string& DBusProxy::getDBusBusName() const {
112 const std::string& DBusProxy::getDBusObjectPath() const {
113 return dbusObjectPath_;
116 const std::string& DBusProxy::getInterfaceName() const {
117 return interfaceName_;
120 const std::shared_ptr<DBusProxyConnection>& DBusProxy::getDBusConnection() const {
124 DBusProxyConnection::DBusSignalHandlerToken DBusProxy::addSignalMemberHandler(
125 const std::string& signalName,
126 const std::string& signalSignature,
127 DBusProxyConnection::DBusSignalHandler* dbusSignalHandler) {
128 return connection_->addSignalMemberHandler(dbusObjectPath_, getInterfaceName(), signalName, signalSignature, dbusSignalHandler);
131 void DBusProxy::removeSignalMemberHandler(const DBusProxyConnection::DBusSignalHandlerToken& dbusSignalHandlerToken) {
132 return connection_->removeSignalMemberHandler(dbusSignalHandlerToken);
136 } // namespace CommonAPI
138 #endif // COMMONAPI_DBUS_DBUS_PROXY_H_