diff options
author | Juergen Gehring <juergen.gehring@bmw.de> | 2017-06-19 07:47:01 -0700 |
---|---|---|
committer | Juergen Gehring <juergen.gehring@bmw.de> | 2017-06-19 07:47:01 -0700 |
commit | 008f6c11f5371e93c06b3ed337326008d2031084 (patch) | |
tree | f25b96bab93d4b71496793d5944e054fc8d303af /include | |
parent | 66de998220d90116aa603d7458e245fe6094b4eb (diff) | |
download | genivi-common-api-runtime-008f6c11f5371e93c06b3ed337326008d2031084.tar.gz |
CommonAPI 3.1.123.1.12
Diffstat (limited to 'include')
-rw-r--r-- | include/CommonAPI/Deployable.hpp | 3 | ||||
-rw-r--r-- | include/CommonAPI/Event.hpp | 32 | ||||
-rw-r--r-- | include/CommonAPI/Proxy.hpp | 18 |
3 files changed, 45 insertions, 8 deletions
diff --git a/include/CommonAPI/Deployable.hpp b/include/CommonAPI/Deployable.hpp index c260586..cf269e8 100644 --- a/include/CommonAPI/Deployable.hpp +++ b/include/CommonAPI/Deployable.hpp @@ -19,7 +19,8 @@ template<typename Type_, typename TypeDepl_> struct Deployable : DeployableBase { Deployable(const TypeDepl_ *_depl = nullptr) - : depl_(const_cast<TypeDepl_ *>(_depl)) { + : value_(), + depl_(const_cast<TypeDepl_ *>(_depl)) { } Deployable(const Type_ &_value, const TypeDepl_ *_depl) diff --git a/include/CommonAPI/Event.hpp b/include/CommonAPI/Event.hpp index 5fbec00..67cc6dc 100644 --- a/include/CommonAPI/Event.hpp +++ b/include/CommonAPI/Event.hpp @@ -72,6 +72,7 @@ protected: void notifyListeners(const Arguments_&... _eventArguments); void notifySpecificListener(const Subscription _subscription, const Arguments_&... _eventArguments); void notifySpecificError(const Subscription _subscription, const CallStatus status); + void notifyErrorListeners(const CallStatus status); virtual void onFirstListenerAdded(const Listener &_listener) { (void)_listener; @@ -267,6 +268,37 @@ void Event<Arguments_...>::notifySpecificError(const Subscription subscription, } } +template<typename ... Arguments_> +void Event<Arguments_...>::notifyErrorListeners(const CallStatus status) { + subscriptionMutex_.lock(); + notificationMutex_.lock(); + for (auto iterator = pendingUnsubscriptions_.begin(); + iterator != pendingUnsubscriptions_.end(); + iterator++) { + subscriptions_.erase(*iterator); + } + pendingUnsubscriptions_.clear(); + + for (auto iterator = pendingSubscriptions_.begin(); + iterator != pendingSubscriptions_.end(); + iterator++) { + subscriptions_.insert(*iterator); + } + pendingSubscriptions_.clear(); + + subscriptionMutex_.unlock(); + + for (auto iterator = subscriptions_.begin(); iterator != subscriptions_.end(); iterator++) { + ErrorListener listener = std::get<1>(iterator->second); + if (listener) { + listener(status); + } + } + + notificationMutex_.unlock(); +} + + } // namespace CommonAPI #endif // COMMONAPI_EVENT_HPP_ diff --git a/include/CommonAPI/Proxy.hpp b/include/CommonAPI/Proxy.hpp index 015658f..a96141c 100644 --- a/include/CommonAPI/Proxy.hpp +++ b/include/CommonAPI/Proxy.hpp @@ -13,6 +13,7 @@ #include <cstdint> #include <memory> #include <type_traits> +#include <future> #include <CommonAPI/Address.hpp> #include <CommonAPI/Attribute.hpp> @@ -24,22 +25,25 @@ namespace CommonAPI { typedef Event<AvailabilityStatus> ProxyStatusEvent; typedef ReadonlyAttribute<Version> InterfaceVersionAttribute; -class Proxy { +class COMMONAPI_EXPORT Proxy { public: - COMMONAPI_EXPORT virtual ~Proxy() {} + virtual ~Proxy(); - COMMONAPI_EXPORT const Address &getAddress() const; + const Address &getAddress() const; - COMMONAPI_EXPORT virtual bool isAvailable() const = 0; + std::future<void> getCompletionFuture(); - COMMONAPI_EXPORT virtual bool isAvailableBlocking() const = 0; + virtual bool isAvailable() const = 0; - COMMONAPI_EXPORT virtual ProxyStatusEvent& getProxyStatusEvent() = 0; + virtual bool isAvailableBlocking() const = 0; - COMMONAPI_EXPORT virtual InterfaceVersionAttribute& getInterfaceVersionAttribute() = 0; + virtual ProxyStatusEvent& getProxyStatusEvent() = 0; + + virtual InterfaceVersionAttribute& getInterfaceVersionAttribute() = 0; protected: Address address_; + std::promise<void> completed_; }; } // namespace CommonAPI |