1 // Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
2 // This Source Code Form is subject to the terms of the Mozilla Public
3 // License, v. 2.0. If a copy of the MPL was not distributed with this
4 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 
6 #include "../include/serviceinfo.hpp"
7 
8 namespace vsomeip_v3 {
9 
serviceinfo(service_t _service,instance_t _instance,major_version_t _major,minor_version_t _minor,ttl_t _ttl,bool _is_local)10 serviceinfo::serviceinfo(service_t _service, instance_t _instance,
11         major_version_t _major, minor_version_t _minor,
12         ttl_t _ttl, bool _is_local)
13     : group_(0),
14       service_(_service),
15       instance_(_instance),
16       major_(_major),
17       minor_(_minor),
18       ttl_(0),
19       reliable_(nullptr),
20       unreliable_(nullptr),
21       is_local_(_is_local),
22       is_in_mainphase_(false) {
23 
24     std::chrono::seconds ttl = static_cast<std::chrono::seconds> (_ttl);
25     ttl_ = std::chrono::duration_cast<std::chrono::milliseconds>(ttl);
26 }
27 
serviceinfo(const serviceinfo & _other)28 serviceinfo::serviceinfo(const serviceinfo& _other) :
29     group_(_other.group_),
30     service_(_other.service_),
31     instance_(_other.instance_),
32     major_(_other.major_),
33     minor_(_other.minor_),
34     ttl_(_other.ttl_),
35     reliable_(_other.reliable_),
36     unreliable_(_other.unreliable_),
37     requesters_(_other.requesters_),
38     is_local_(_other.is_local_),
39     is_in_mainphase_(_other.is_in_mainphase_)
40     {}
41 
~serviceinfo()42 serviceinfo::~serviceinfo() {
43 }
44 
get_group() const45 servicegroup * serviceinfo::get_group() const {
46   return group_;
47 }
48 
set_group(servicegroup * _group)49 void serviceinfo::set_group(servicegroup *_group) {
50   group_ = _group;
51 }
52 
get_service() const53 service_t serviceinfo::get_service() const {
54     return service_;
55 }
56 
get_instance() const57 instance_t serviceinfo::get_instance() const {
58     return instance_;
59 }
60 
get_major() const61 major_version_t serviceinfo::get_major() const {
62   return major_;
63 }
64 
get_minor() const65 minor_version_t serviceinfo::get_minor() const {
66   return minor_;
67 }
68 
get_ttl() const69 ttl_t serviceinfo::get_ttl() const {
70   std::lock_guard<std::mutex> its_lock(ttl_mutex_);
71   ttl_t ttl = static_cast<ttl_t>(std::chrono::duration_cast<std::chrono::seconds>(ttl_).count());
72   return ttl;
73 }
74 
set_ttl(ttl_t _ttl)75 void serviceinfo::set_ttl(ttl_t _ttl) {
76   std::lock_guard<std::mutex> its_lock(ttl_mutex_);
77   std::chrono::seconds ttl = static_cast<std::chrono::seconds>(_ttl);
78   ttl_ = std::chrono::duration_cast<std::chrono::milliseconds> (ttl);
79 }
80 
get_precise_ttl() const81 std::chrono::milliseconds serviceinfo::get_precise_ttl() const {
82   std::lock_guard<std::mutex> its_lock(ttl_mutex_);
83   return ttl_;
84 }
85 
set_precise_ttl(std::chrono::milliseconds _precise_ttl)86 void serviceinfo::set_precise_ttl(std::chrono::milliseconds _precise_ttl) {
87   std::lock_guard<std::mutex> its_lock(ttl_mutex_);
88   ttl_ = _precise_ttl;
89 }
90 
get_endpoint(bool _reliable) const91 std::shared_ptr<endpoint> serviceinfo::get_endpoint(bool _reliable) const {
92   std::lock_guard<std::mutex> its_lock(endpoint_mutex_);
93   return (_reliable ? reliable_ : unreliable_);
94 }
95 
set_endpoint(const std::shared_ptr<endpoint> & _endpoint,bool _reliable)96 void serviceinfo::set_endpoint(const std::shared_ptr<endpoint>& _endpoint,
97                                bool _reliable) {
98   std::lock_guard<std::mutex> its_lock(endpoint_mutex_);
99   if (_reliable) {
100     reliable_ = _endpoint;
101   } else {
102     unreliable_ = _endpoint;
103   }
104 }
105 
add_client(client_t _client)106 void serviceinfo::add_client(client_t _client) {
107   std::lock_guard<std::mutex> its_lock(requesters_mutex_);
108   requesters_.insert(_client);
109 }
110 
remove_client(client_t _client)111 void serviceinfo::remove_client(client_t _client) {
112   std::lock_guard<std::mutex> its_lock(requesters_mutex_);
113   requesters_.erase(_client);
114 }
115 
get_requesters_size()116 uint32_t serviceinfo::get_requesters_size() {
117     std::lock_guard<std::mutex> its_lock(requesters_mutex_);
118     return static_cast<std::uint32_t>(requesters_.size());
119 }
120 
is_local() const121 bool serviceinfo::is_local() const {
122     return is_local_;
123 }
124 
is_in_mainphase() const125 bool serviceinfo::is_in_mainphase() const {
126     return is_in_mainphase_;
127 }
128 
set_is_in_mainphase(bool _in_mainphase)129 void serviceinfo::set_is_in_mainphase(bool _in_mainphase) {
130     is_in_mainphase_ = _in_mainphase;
131 }
132 
133 }  // namespace vsomeip_v3
134