// Copyright (C) 2013-2015 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. #if !defined (COMMONAPI_INTERNAL_COMPILATION) #error "Only can be included directly, this file may disappear or change contents." #endif #ifndef COMMONAPI_DBUS_DBUSPROXYCONNECTION_HPP_ #define COMMONAPI_DBUS_DBUSPROXYCONNECTION_HPP_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace CommonAPI { namespace DBus { typedef std::function DBusMessageHandler; class DBusDaemonProxy; class DBusServiceRegistry; class DBusObjectManager; class DBusProxy; class DBusProxyConnection { public: class DBusMessageReplyAsyncHandler { public: virtual ~DBusMessageReplyAsyncHandler() {} virtual std::future getFuture() = 0; virtual void onDBusMessageReply(const CallStatus&, const DBusMessage&) = 0; }; class DBusSignalHandler { public: virtual ~DBusSignalHandler() {} virtual void onSignalDBusMessage(const DBusMessage&) = 0; virtual void onInitialValueSignalDBusMessage(const DBusMessage&, const uint32_t) {}; }; // objectPath, interfaceName, interfaceMemberName, interfaceMemberSignature typedef std::tuple DBusSignalHandlerPath; typedef std::unordered_map, std::set>> DBusSignalHandlerTable; typedef DBusSignalHandlerPath DBusSignalHandlerToken; typedef Event ConnectionStatusEvent; virtual ~DBusProxyConnection() {} virtual bool isConnected() const = 0; virtual ConnectionStatusEvent& getConnectionStatusEvent() = 0; virtual bool sendDBusMessage(const DBusMessage& dbusMessage) const = 0; virtual std::future sendDBusMessageWithReplyAsync( const DBusMessage& dbusMessage, std::unique_ptr dbusMessageReplyAsyncHandler, const CommonAPI::CallInfo *_info) const = 0; virtual DBusMessage sendDBusMessageWithReplyAndBlock( const DBusMessage& dbusMessage, DBusError& dbusError, const CommonAPI::CallInfo *_info) const = 0; virtual DBusSignalHandlerToken addSignalMemberHandler( const std::string& objectPath, const std::string& interfaceName, const std::string& interfaceMemberName, const std::string& interfaceMemberSignature, DBusSignalHandler* dbusSignalHandler, const bool justAddFilter = false) = 0; virtual DBusSignalHandlerToken subscribeForSelectiveBroadcast(bool& subscriptionAccepted, const std::string& objectPath, const std::string& interfaceName, const std::string& interfaceMemberName, const std::string& interfaceMemberSignature, DBusSignalHandler* dbusSignalHandler, DBusProxy* callingProxy) = 0; virtual void unsubscribeFromSelectiveBroadcast(const std::string& eventName, DBusProxyConnection::DBusSignalHandlerToken subscription, DBusProxy* callingProxy, const DBusSignalHandler* dbusSignalHandler) = 0; virtual bool removeSignalMemberHandler(const DBusSignalHandlerToken& dbusSignalHandlerToken, const DBusSignalHandler* dbusSignalHandler = NULL) = 0; virtual bool addObjectManagerSignalMemberHandler(const std::string& dbusBusName, DBusSignalHandler* dbusSignalHandler) = 0; virtual bool removeObjectManagerSignalMemberHandler(const std::string& dbusBusName, DBusSignalHandler* dbusSignalHandler) = 0; virtual const std::shared_ptr getDBusObjectManager() = 0; virtual void registerObjectPath(const std::string& objectPath) = 0; virtual void unregisterObjectPath(const std::string& objectPath) = 0; virtual bool requestServiceNameAndBlock(const std::string& serviceName) const = 0; virtual bool releaseServiceName(const std::string& serviceName) const = 0; typedef std::function DBusObjectPathMessageHandler; virtual void setObjectPathMessageHandler(DBusObjectPathMessageHandler) = 0; virtual bool isObjectPathMessageHandlerSet() = 0; virtual bool hasDispatchThread() = 0; }; } // namespace DBus } // namespace CommonAPI #endif // COMMONAPI_DBUS_DBUSPROXYCONNECTION_HPP_