MCPcopy Create free account
hub / github.com/COVESA/vsomeip / insert_subscription

Method insert_subscription

implementation/routing/src/routing_manager_client.cpp:2923–2961  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2921}
2922
2923bool routing_manager_client::insert_subscription(service_t _service, instance_t _instance, eventgroup_t _eventgroup, event_t _event,
2924 const std::shared_ptr<debounce_filter_impl_t>& _filter, client_t _client,
2925 std::scoped_lock<std::mutex> const& _lock) {
2926
2927 bool is_inserted(false);
2928 if (_event != ANY_EVENT) { // subscribe to specific event
2929 std::shared_ptr<event> its_event = find_provided_event(_service, _instance, _event, _lock);
2930 if (its_event) {
2931 is_inserted = its_event->add_subscriber(_eventgroup, _filter, _client, host_->is_routing());
2932 } else {
2933 VSOMEIP_WARNING_P << "(" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << "." << hex4(_eventgroup)
2934 << "." << hex4(_event) << "] received subscription for unknown (unrequested /unoffered) event. Creating"
2935 << " placeholder event holding subscription until event is requested/offered.";
2936 is_inserted = create_placeholder_event_and_subscribe(_service, _instance, _eventgroup, _event, _filter, _client, _lock);
2937 }
2938 } else { // subscribe to all events of the eventgroup
2939 auto its_eventgroup = find_eventgroup(provided_eventgroups_, _service, _instance, _eventgroup, _lock);
2940 bool create_place_holder(false);
2941 if (its_eventgroup) {
2942 std::set<std::shared_ptr<event>> its_events = its_eventgroup->get_events();
2943 if (!its_events.size()) {
2944 create_place_holder = true;
2945 } else {
2946 for (const auto& e : its_events) {
2947 is_inserted = e->add_subscriber(_eventgroup, _filter, _client, host_->is_routing()) || is_inserted;
2948 }
2949 }
2950 } else {
2951 create_place_holder = true;
2952 }
2953 if (create_place_holder) {
2954 VSOMEIP_WARNING_P << ":(" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << "." << hex4(_eventgroup)
2955 << "." << hex4(_event) << "] received subscription for unknown (unrequested /unoffered) eventgroup. Creating"
2956 << " placeholder event holding subscription until event is requested/offered.";
2957 is_inserted = create_placeholder_event_and_subscribe(_service, _instance, _eventgroup, _event, _filter, _client, _lock);
2958 }
2959 }
2960 return is_inserted;
2961}
2962
2963std::set<std::tuple<service_t, instance_t, eventgroup_t>>
2964routing_manager_client::get_subscriptions(const client_t _client,

Callers

nothing calls this directly

Calls 5

hex4Function · 0.85
add_subscriberMethod · 0.80
get_eventsMethod · 0.80
is_routingMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected