summaryrefslogtreecommitdiff
path: root/include/CommonAPI/DBus/DBusProxy.hpp
diff options
context:
space:
mode:
authorJürgen Gehring <Juergen.Gehring@bmw.de>2016-10-11 03:30:13 -0700
committerJürgen Gehring <Juergen.Gehring@bmw.de>2016-10-11 03:30:13 -0700
commitbdf7ab8cf3243619f0b8bc526f07e5b03624b94c (patch)
tree6ed18368c5fc5c70f3ad27525ab2515ee0817f37 /include/CommonAPI/DBus/DBusProxy.hpp
parent3348a422ffc756b63de5890356383858a898e8b1 (diff)
downloadgenivi-common-api-dbus-runtime-bdf7ab8cf3243619f0b8bc526f07e5b03624b94c.tar.gz
CommonAPI-D-Bus 3.1.83.1.8
Diffstat (limited to 'include/CommonAPI/DBus/DBusProxy.hpp')
-rw-r--r--include/CommonAPI/DBus/DBusProxy.hpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/include/CommonAPI/DBus/DBusProxy.hpp b/include/CommonAPI/DBus/DBusProxy.hpp
index 04f2ca9..c8a57bc 100644
--- a/include/CommonAPI/DBus/DBusProxy.hpp
+++ b/include/CommonAPI/DBus/DBusProxy.hpp
@@ -36,8 +36,9 @@ class DBusProxyStatusEvent
};
-class DBusProxy
- : public DBusProxyBase {
+class COMMONAPI_EXPORT_CLASS_EXPLICIT DBusProxy
+ : public DBusProxyBase,
+ public std::enable_shared_from_this<DBusProxy> {
public:
COMMONAPI_EXPORT DBusProxy(const DBusAddress &_address,
const std::shared_ptr<DBusProxyConnection> &_connection);
@@ -48,14 +49,20 @@ public:
COMMONAPI_EXPORT virtual bool isAvailable() const;
COMMONAPI_EXPORT virtual bool isAvailableBlocking() const;
+ COMMONAPI_EXPORT virtual std::future<AvailabilityStatus> isAvailableAsync(
+ isAvailableAsyncCallback _callback,
+ const CallInfo *_info) const;
- COMMONAPI_EXPORT DBusProxyConnection::DBusSignalHandlerToken subscribeForSelectiveBroadcastOnConnection(
- bool& subscriptionAccepted,
+ COMMONAPI_EXPORT void subscribeForSelectiveBroadcastOnConnection(
const std::string& objectPath,
const std::string& interfaceName,
const std::string& interfaceMemberName,
const std::string& interfaceMemberSignature,
- DBusProxyConnection::DBusSignalHandler* dbusSignalHandler);
+ DBusProxyConnection::DBusSignalHandler* dbusSignalHandler,
+ uint32_t tag);
+
+ COMMONAPI_EXPORT void insertSelectiveSubscription(const std::string& interfaceMemberName,
+ DBusProxyConnection::DBusSignalHandler* dbusSignalHandler, uint32_t tag);
COMMONAPI_EXPORT void unsubscribeFromSelectiveBroadcast(const std::string& eventName,
DBusProxyConnection::DBusSignalHandlerToken subscription,
const DBusProxyConnection::DBusSignalHandler* dbusSignalHandler);
@@ -119,10 +126,11 @@ private:
const uint32_t tag);
COMMONAPI_EXPORT void addSignalMemberHandlerToQueue(SignalMemberHandlerTuple& _signalMemberHandler);
+ COMMONAPI_EXPORT void availabilityTimeoutThreadHandler() const;
+
DBusProxyStatusEvent dbusProxyStatusEvent_;
DBusServiceRegistry::DBusServiceSubscription dbusServiceRegistrySubscription_;
AvailabilityStatus availabilityStatus_;
- mutable std::mutex availabilityStatusMutex_;
DBusReadonlyAttribute<InterfaceVersionAttribute> interfaceVersionAttribute_;
@@ -132,11 +140,22 @@ private:
mutable std::condition_variable availabilityCondition_;
std::list<SignalMemberHandlerTuple> signalMemberHandlerQueue_;
- CallInfo signalMemberHandlerInfo_;
mutable std::mutex signalMemberHandlerQueueMutex_;
- std::map<std::string, DBusProxyConnection::DBusSignalHandler*> selectiveBroadcastHandlers;
+ std::map<std::string, std::pair<DBusProxyConnection::DBusSignalHandler*, uint32_t>> selectiveBroadcastHandlers;
mutable std::mutex selectiveBroadcastHandlersMutex_;
+
+ mutable std::shared_ptr<std::thread> availabilityTimeoutThread_;
+ mutable std::mutex availabilityTimeoutThreadMutex_;
+ mutable std::mutex timeoutsMutex_;
+ mutable std::condition_variable availabilityTimeoutCondition_;
+
+ typedef std::tuple<
+ std::chrono::time_point<std::chrono::high_resolution_clock>,
+ isAvailableAsyncCallback,
+ std::promise<AvailabilityStatus>
+ > AvailabilityTimeout_t;
+ mutable std::list<AvailabilityTimeout_t> timeouts_;
};