summaryrefslogtreecommitdiff
path: root/implementation/service_discovery/src/remote_subscription_ack.cpp
blob: 45fa0576bd273f48893f41532f0ea2e38c1b2030 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright (C) 2014-2021 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

#include "../include/message_impl.hpp"
#include "../include/remote_subscription_ack.hpp"
#include "../../routing/include/remote_subscription.hpp"

namespace vsomeip_v3 {
namespace sd {

remote_subscription_ack::remote_subscription_ack(const boost::asio::ip::address &_address)
    : is_complete_(false),
      is_done_(false),
      target_address_(_address) {
    messages_.push_back(std::make_shared<message_impl>());
}

bool
remote_subscription_ack::is_complete() const {
    return is_complete_;
}

void
remote_subscription_ack::complete() {
    is_complete_ = true;
}

bool
remote_subscription_ack::is_done() const {
    return is_done_;
}

void
remote_subscription_ack::done() {
    is_done_ = true;
}

std::vector<std::shared_ptr<message_impl> >
remote_subscription_ack::get_messages() const {
    return messages_;
}

std::shared_ptr<message_impl> remote_subscription_ack::get_current_message() const {
    return messages_.back();
}

std::shared_ptr<message_impl> remote_subscription_ack::add_message() {
    messages_.emplace_back(std::make_shared<message_impl>());
    return messages_.back();
}

boost::asio::ip::address
remote_subscription_ack::get_target_address() const {
    return target_address_;
}

bool
remote_subscription_ack::is_pending() const {
    for (const auto& its_subscription : subscriptions_) {
        if (its_subscription->is_pending()
                && its_subscription->get_answers() != 0) {
            return true;
        }
    }
    return false;
}

std::set<std::shared_ptr<remote_subscription> >
remote_subscription_ack::get_subscriptions() const {
    return subscriptions_;
}

void
remote_subscription_ack::add_subscription(
        const std::shared_ptr<remote_subscription> &_subscription) {
    subscriptions_.insert(_subscription);
}

bool
remote_subscription_ack::has_subscription() const {
    return (0 < subscriptions_.size());
}

std::unique_lock<std::recursive_mutex> remote_subscription_ack::get_lock() {
    return std::unique_lock<std::recursive_mutex>(mutex_);
}

} // namespace sd
} // namespace vsomeip_v3