summaryrefslogtreecommitdiff
path: root/implementation/service_discovery/src/subscription.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/service_discovery/src/subscription.cpp')
-rw-r--r--implementation/service_discovery/src/subscription.cpp93
1 files changed, 65 insertions, 28 deletions
diff --git a/implementation/service_discovery/src/subscription.cpp b/implementation/service_discovery/src/subscription.cpp
index aca8967..03a55d7 100644
--- a/implementation/service_discovery/src/subscription.cpp
+++ b/implementation/service_discovery/src/subscription.cpp
@@ -5,30 +5,19 @@
#include "../include/subscription.hpp"
-namespace vsomeip {
-namespace sd {
-
-subscription::subscription(major_version_t _major, ttl_t _ttl,
- std::shared_ptr<endpoint> _reliable,
- std::shared_ptr<endpoint> _unreliable,
- subscription_type_e _subscription_type,
- uint8_t _counter)
- : major_(_major), ttl_(_ttl),
- reliable_(_reliable), unreliable_(_unreliable),
- is_acknowledged_(true),
- tcp_connection_established_(false),
- udp_connection_established_(false),
- subscription_type_(_subscription_type),
- counter_(_counter) {
-}
+#include <vsomeip/internal/logger.hpp>
-subscription::~subscription() {
-}
+namespace vsomeip_v3 {
+namespace sd {
major_version_t subscription::get_major() const {
return major_;
}
+void subscription::set_major(major_version_t _major) {
+ major_ = _major;
+}
+
ttl_t subscription::get_ttl() const {
return ttl_;
}
@@ -41,7 +30,7 @@ std::shared_ptr<endpoint> subscription::get_endpoint(bool _reliable) const {
return (_reliable ? reliable_ : unreliable_);
}
-void subscription::set_endpoint(std::shared_ptr<endpoint> _endpoint,
+void subscription::set_endpoint(const std::shared_ptr<endpoint>& _endpoint,
bool _reliable) {
if (_reliable)
reliable_ = _endpoint;
@@ -49,12 +38,29 @@ void subscription::set_endpoint(std::shared_ptr<endpoint> _endpoint,
unreliable_ = _endpoint;
}
-bool subscription::is_acknowledged() const {
- return is_acknowledged_;
+bool subscription::is_selective() const {
+ return is_selective_;
+}
+void subscription::set_selective(const bool _is_selective) {
+ is_selective_ = _is_selective;
}
-void subscription::set_acknowledged(bool _is_acknowledged) {
- is_acknowledged_ = _is_acknowledged;
+subscription_state_e
+subscription::get_state(const client_t _client) const {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ auto found_client = clients_.find(_client);
+ if (found_client != clients_.end())
+ return found_client->second;
+ return subscription_state_e::ST_UNKNOWN;
+}
+
+void
+subscription::set_state(
+ const client_t _client, const subscription_state_e _state) {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ auto found_client = clients_.find(_client);
+ if (found_client != clients_.end())
+ found_client->second = _state;
}
bool subscription::is_tcp_connection_established() const {
@@ -71,13 +77,44 @@ void subscription::set_udp_connection_established(bool _is_established) {
udp_connection_established_ = _is_established;
}
-subscription_type_e subscription::get_subscription_type() const {
- return subscription_type_;
+bool
+subscription::add_client(const client_t _client) {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ auto find_client = clients_.find(_client);
+ if (find_client != clients_.end())
+ return false;
+
+ clients_[_client] = subscription_state_e::ST_UNKNOWN;
+ return true;
+}
+
+bool
+subscription::remove_client(const client_t _client) {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ auto its_size = clients_.size();
+ clients_.erase(_client);
+ return (its_size > clients_.size());
+}
+
+std::set<client_t> subscription::get_clients() const {
+ std::set<client_t> its_clients;
+ {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ for (const auto its_item : clients_)
+ its_clients.insert(its_item.first);
+ }
+ return its_clients;
+}
+
+bool subscription::has_client() const {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ return (clients_.size() > 0);
}
-uint8_t subscription::get_counter() const {
- return counter_;
+bool subscription::has_client(const client_t _client) const {
+ std::lock_guard<std::mutex> its_lock(clients_mutex_);
+ return (clients_.find(_client) != clients_.end());
}
} // namespace sd
-} // namespace vsomeip
+} // namespace vsomeip_v3