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