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

Method unsubscribe

implementation/routing/src/routing_manager_impl.cpp:593–639  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

591}
592
593void routing_manager_impl::unsubscribe(client_t _client, service_t _service, instance_t _instance, eventgroup_t _eventgroup,
594 event_t _event) {
595
596 VSOMEIP_INFO << "UNSUBSCRIBE(" << hex4(_client) << "): [" << hex4(_service) << "." << hex4(_instance) << "." << hex4(_eventgroup) << "."
597 << hex4(_event) << "]";
598
599 bool last_subscriber_removed(true);
600
601 std::shared_ptr<eventgroupinfo> its_info = find_eventgroup(_service, _instance, _eventgroup);
602 if (its_info) {
603 for (const auto& e : its_info->get_events()) {
604 if (e->get_event() == _event || ANY_EVENT == _event)
605 e->remove_subscriber(_eventgroup, _client);
606 }
607 for (const auto& e : its_info->get_events()) {
608 if (e->has_subscriber(_eventgroup, ANY_CLIENT)) {
609 last_subscriber_removed = false;
610 break;
611 }
612 }
613 }
614
615 if (discovery_) {
616 if (auto its_local_client = find_local_client(_service, _instance); VSOMEIP_ROUTING_CLIENT == its_local_client) {
617 if (last_subscriber_removed) {
618 unset_all_eventpayloads(_service, _instance, _eventgroup);
619 {
620 auto tuple = std::make_tuple(_service, _instance, _eventgroup, _client);
621 std::scoped_lock its_lock{remote_subscription_state_mutex_};
622 remote_subscription_state_.erase(tuple);
623 }
624 }
625
626 if (its_info && (last_subscriber_removed || its_info->is_selective())) {
627
628 discovery_->unsubscribe(_service, _instance, _eventgroup, its_info->is_selective() ? _client : VSOMEIP_ROUTING_CLIENT);
629 }
630 }
631
632 if (last_subscriber_removed) {
633 ep_mgr_impl_->clear_multicast_endpoints(_service, _instance);
634 }
635
636 } else {
637 VSOMEIP_ERROR << "SOME/IP eventgroups require SD to be enabled!";
638 }
639}
640
641bool routing_manager_impl::send_notification(client_t _client, std::shared_ptr<message> _message, bool _force) {
642 bool is_sent(false);

Callers 2

release_serviceMethod · 0.45
on_messageMethod · 0.45

Calls 7

hex4Function · 0.85
get_eventsMethod · 0.80
remove_subscriberMethod · 0.80
has_subscriberMethod · 0.80
get_eventMethod · 0.45
is_selectiveMethod · 0.45

Tested by

no test coverage detected