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/message_impl.hpp" 7 #include "../include/remote_subscription_ack.hpp" 8 #include "../../routing/include/remote_subscription.hpp" 9 10 namespace vsomeip_v3 { 11 namespace sd { 12 remote_subscription_ack(const boost::asio::ip::address & _address)13remote_subscription_ack::remote_subscription_ack(const boost::asio::ip::address &_address) 14 : is_complete_(false), 15 is_done_(false), 16 target_address_(_address) { 17 messages_.push_back(std::make_shared<message_impl>()); 18 } 19 20 bool is_complete() const21remote_subscription_ack::is_complete() const { 22 return is_complete_; 23 } 24 25 void complete()26remote_subscription_ack::complete() { 27 is_complete_ = true; 28 } 29 30 bool is_done() const31remote_subscription_ack::is_done() const { 32 return is_done_; 33 } 34 35 void done()36remote_subscription_ack::done() { 37 is_done_ = true; 38 } 39 40 std::vector<std::shared_ptr<message_impl> > get_messages() const41remote_subscription_ack::get_messages() const { 42 return messages_; 43 } 44 get_current_message() const45std::shared_ptr<message_impl> remote_subscription_ack::get_current_message() const { 46 return messages_.back(); 47 } 48 add_message()49std::shared_ptr<message_impl> remote_subscription_ack::add_message() { 50 messages_.emplace_back(std::make_shared<message_impl>()); 51 return messages_.back(); 52 } 53 54 boost::asio::ip::address get_target_address() const55remote_subscription_ack::get_target_address() const { 56 return target_address_; 57 } 58 59 bool is_pending() const60remote_subscription_ack::is_pending() const { 61 for (const auto& its_subscription : subscriptions_) { 62 if (its_subscription->is_pending() 63 && its_subscription->get_answers() != 0) { 64 return true; 65 } 66 } 67 return false; 68 } 69 70 std::set<std::shared_ptr<remote_subscription> > get_subscriptions() const71remote_subscription_ack::get_subscriptions() const { 72 return subscriptions_; 73 } 74 75 void add_subscription(const std::shared_ptr<remote_subscription> & _subscription)76remote_subscription_ack::add_subscription( 77 const std::shared_ptr<remote_subscription> &_subscription) { 78 subscriptions_.insert(_subscription); 79 } 80 81 bool has_subscription() const82remote_subscription_ack::has_subscription() const { 83 return (0 < subscriptions_.size()); 84 } 85 get_lock()86std::unique_lock<std::recursive_mutex> remote_subscription_ack::get_lock() { 87 return std::unique_lock<std::recursive_mutex>(mutex_); 88 } 89 90 } // namespace sd 91 } // namespace vsomeip_v3 92