summaryrefslogtreecommitdiff
path: root/implementation/routing/include/remote_subscription.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/routing/include/remote_subscription.hpp')
-rw-r--r--implementation/routing/include/remote_subscription.hpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/implementation/routing/include/remote_subscription.hpp b/implementation/routing/include/remote_subscription.hpp
new file mode 100644
index 0000000..00f2b57
--- /dev/null
+++ b/implementation/routing/include/remote_subscription.hpp
@@ -0,0 +1,129 @@
+// Copyright (C) 2018 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/.
+
+#ifndef VSOMEIP_V3_REMOTE_SUBSCRIPTION_HPP_
+#define VSOMEIP_V3_REMOTE_SUBSCRIPTION_HPP_
+
+#include <atomic>
+#include <map>
+#include <mutex>
+#include <set>
+
+#include <vsomeip/primitive_types.hpp>
+
+#include "../../endpoints/include/endpoint_definition.hpp"
+#include "types.hpp"
+#include <vsomeip/export.hpp>
+
+
+namespace vsomeip_v3 {
+
+class eventgroupinfo;
+
+const remote_subscription_id_t PENDING_SUBSCRIPTION_ID(0);
+
+class remote_subscription {
+public:
+ VSOMEIP_EXPORT remote_subscription();
+ VSOMEIP_EXPORT ~remote_subscription();
+
+ bool operator==(const remote_subscription &_other) const;
+ bool equals(const std::shared_ptr<remote_subscription> &_other) const;
+
+ VSOMEIP_EXPORT void reset(const std::set<client_t> &_clients);
+
+ VSOMEIP_EXPORT bool is_initial() const;
+ VSOMEIP_EXPORT void set_initial(const bool _is_initial);
+
+ VSOMEIP_EXPORT bool force_initial_events() const;
+ VSOMEIP_EXPORT void set_force_initial_events(const bool _force_initial_events);
+
+ remote_subscription_id_t get_id() const;
+ void set_id(const remote_subscription_id_t _id);
+
+ std::shared_ptr<remote_subscription> get_parent() const;
+ void set_parent(const std::shared_ptr<remote_subscription> &_parent);
+
+ VSOMEIP_EXPORT std::shared_ptr<eventgroupinfo> get_eventgroupinfo() const;
+ VSOMEIP_EXPORT void set_eventgroupinfo(const std::shared_ptr<eventgroupinfo> &_info);
+
+ VSOMEIP_EXPORT ttl_t get_ttl() const;
+ VSOMEIP_EXPORT void set_ttl(const ttl_t _ttl);
+
+ uint16_t get_reserved() const;
+ void set_reserved(const uint16_t _reserved);
+
+ uint8_t get_counter() const;
+ void set_counter(uint8_t _counter);
+
+ VSOMEIP_EXPORT std::set<client_t> get_clients() const;
+ bool has_client() const;
+ bool has_client(const client_t _client) const;
+ void remove_client(const client_t _client);
+
+ VSOMEIP_EXPORT remote_subscription_state_e get_client_state(const client_t _client) const;
+ void set_client_state(const client_t _client,
+ remote_subscription_state_e _state);
+ void set_all_client_states(remote_subscription_state_e _state);
+
+ std::chrono::steady_clock::time_point get_expiration(const client_t _client) const;
+
+ VSOMEIP_EXPORT std::shared_ptr<endpoint_definition> get_subscriber() const;
+ VSOMEIP_EXPORT void set_subscriber(const std::shared_ptr<endpoint_definition> &_subscriber);
+
+ VSOMEIP_EXPORT std::shared_ptr<endpoint_definition> get_reliable() const;
+ VSOMEIP_EXPORT void set_reliable(const std::shared_ptr<endpoint_definition> &_reliable);
+
+ VSOMEIP_EXPORT std::shared_ptr<endpoint_definition> get_unreliable() const;
+ VSOMEIP_EXPORT void set_unreliable(const std::shared_ptr<endpoint_definition> &_unreliable);
+
+ VSOMEIP_EXPORT bool is_pending() const;
+ bool is_acknowledged() const;
+
+ std::set<client_t> update(const std::set<client_t> &_clients,
+ const std::chrono::steady_clock::time_point &_timepoint,
+ const bool _is_subscribe);
+
+ VSOMEIP_EXPORT std::uint32_t get_answers() const;
+ void set_answers(const std::uint32_t _answers);
+
+private:
+ std::atomic<remote_subscription_id_t> id_;
+ std::atomic<bool> is_initial_;
+ std::atomic<bool> force_initial_events_;
+ std::weak_ptr<remote_subscription> parent_;
+
+ std::weak_ptr<eventgroupinfo> eventgroupinfo_;
+
+ major_version_t major_;
+ ttl_t ttl_;
+ std::uint16_t reserved_;
+ std::uint8_t counter_;
+
+ std::map<client_t,
+ std::pair<remote_subscription_state_e,
+ std::chrono::steady_clock::time_point
+ >
+ > clients_;
+
+ // The endpoint that sent(!) the subscription
+ std::shared_ptr<endpoint_definition> subscriber_;
+
+ // The endpoints defined by the endpoint options
+ std::shared_ptr<endpoint_definition> reliable_;
+ std::shared_ptr<endpoint_definition> unreliable_;
+
+ // Number of acknowledgements that must be sent
+ // for the subscriptions. This is usally 1, but
+ // may be larger if a matching subscription arrived
+ // before the subscription could be acknowledged
+ std::uint32_t answers_;
+
+ mutable std::mutex mutex_;
+};
+
+} // namespace vsomeip_v3
+
+#endif // VSOMEIP_V3_REMOTE_SUBSCRIPTION_HPP_