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