summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJuergen Gehring <juergen.gehring@bmw.de>2017-06-19 07:47:01 -0700
committerJuergen Gehring <juergen.gehring@bmw.de>2017-06-19 07:47:01 -0700
commit008f6c11f5371e93c06b3ed337326008d2031084 (patch)
treef25b96bab93d4b71496793d5944e054fc8d303af /include
parent66de998220d90116aa603d7458e245fe6094b4eb (diff)
downloadgenivi-common-api-runtime-008f6c11f5371e93c06b3ed337326008d2031084.tar.gz
CommonAPI 3.1.123.1.12
Diffstat (limited to 'include')
-rw-r--r--include/CommonAPI/Deployable.hpp3
-rw-r--r--include/CommonAPI/Event.hpp32
-rw-r--r--include/CommonAPI/Proxy.hpp18
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