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 #ifndef VSOMEIP_V3_SERVICEINFO_HPP_
7 #define VSOMEIP_V3_SERVICEINFO_HPP_
8 
9 #include <memory>
10 #include <set>
11 #include <string>
12 #include <chrono>
13 #include <mutex>
14 
15 #include <vsomeip/export.hpp>
16 #include <vsomeip/primitive_types.hpp>
17 
18 namespace vsomeip_v3 {
19 
20 class endpoint;
21 class servicegroup;
22 
23 class serviceinfo {
24 public:
25     VSOMEIP_EXPORT serviceinfo(service_t _service, instance_t _instance,
26             major_version_t _major, minor_version_t _minor,
27             ttl_t _ttl, bool _is_local);
28     VSOMEIP_EXPORT serviceinfo(const serviceinfo& _other);
29     VSOMEIP_EXPORT ~serviceinfo();
30 
31     VSOMEIP_EXPORT servicegroup * get_group() const;
32     VSOMEIP_EXPORT void set_group(servicegroup *_group);
33 
34     VSOMEIP_EXPORT service_t get_service() const;
35     VSOMEIP_EXPORT instance_t get_instance() const;
36 
37     VSOMEIP_EXPORT major_version_t get_major() const;
38     VSOMEIP_EXPORT minor_version_t get_minor() const;
39 
40     VSOMEIP_EXPORT ttl_t get_ttl() const;
41     VSOMEIP_EXPORT void set_ttl(ttl_t _ttl);
42 
43     VSOMEIP_EXPORT std::chrono::milliseconds get_precise_ttl() const;
44     VSOMEIP_EXPORT void set_precise_ttl(std::chrono::milliseconds _precise_ttl);
45 
46     VSOMEIP_EXPORT std::shared_ptr<endpoint> get_endpoint(bool _reliable) const;
47     VSOMEIP_EXPORT void set_endpoint(const std::shared_ptr<endpoint>& _endpoint,
48             bool _reliable);
49 
50     VSOMEIP_EXPORT void add_client(client_t _client);
51     VSOMEIP_EXPORT void remove_client(client_t _client);
52     VSOMEIP_EXPORT uint32_t get_requesters_size();
53 
54     VSOMEIP_EXPORT bool is_local() const;
55 
56     VSOMEIP_EXPORT bool is_in_mainphase() const;
57     VSOMEIP_EXPORT void set_is_in_mainphase(bool _in_mainphase);
58 
59 private:
60     servicegroup *group_;
61 
62     service_t service_;
63     instance_t instance_;
64 
65     major_version_t major_;
66     minor_version_t minor_;
67 
68     mutable std::mutex ttl_mutex_;
69     std::chrono::milliseconds ttl_;
70 
71     std::shared_ptr<endpoint> reliable_;
72     std::shared_ptr<endpoint> unreliable_;
73 
74     mutable std::mutex endpoint_mutex_;
75     std::mutex requesters_mutex_;
76     std::set<client_t> requesters_;
77 
78     bool is_local_;
79     bool is_in_mainphase_;
80 };
81 
82 }  // namespace vsomeip_v3
83 
84 #endif // VSOMEIP_V3_SERVICEINFO_HPP_
85