![]() |
CommRaT 2.0.0
C++20 Real-Time Messaging Framework
|
Subscription protocol handler. More...
#include <commrat/module/services/subscription.hpp>
Public Member Functions | |
| void | set_config (const ModuleConfig *cfg) |
| void | set_work_mailbox (RegistryMailbox< SystemRegistry > *mbx) |
| void | set_module_name (const std::string &name) |
| void | subscribe_to_all_sources () |
| Subscribe to all configured input sources. | |
| void | subscribe_to_source (uint8_t source_system_id, uint8_t source_instance_id) |
| Legacy single-input subscription (backward compatible) | |
| void | unsubscribe_from_source (uint8_t source_system_id, uint8_t source_instance_id) |
| Unsubscribe from single-input source. | |
| void | unsubscribe_from_multi_input_source (const MultiInputConfig::InputSource &source) |
| Unsubscribe from multi-input source. | |
| template<typename SubscriberMgr > | |
| void | handle_subscribe_request (const SubscribeRequestType &req, SubscriberMgr &sub_mgr, std::size_t output_idx=0) |
| Handle incoming SubscribeRequest (producer side) | |
| void | handle_subscribe_reply (const SubscribeReplyType &reply) |
| Handle incoming SubscribeReply (consumer side) | |
| template<typename SubscriberMgr > | |
| void | handle_unsubscribe_request (const UnsubscribeRequestType &req, SubscriberMgr &sub_mgr) |
| Handle incoming UnsubscribeRequest (producer side) | |
Protected Types | |
| using | SubscribeRequestType = SubscribeRequestPayload |
| using | SubscribeReplyType = SubscribeReplyPayload |
| using | UnsubscribeRequestType = UnsubscribeRequestPayload |
| using | UnsubscribeReplyType = UnsubscribeReplyPayload |
Protected Member Functions | |
| void | subscribe_to_source_impl (uint8_t source_system_id, uint8_t source_instance_id, size_t source_index) |
| Internal implementation: send SubscribeRequest to one source. | |
| template<size_t... Is> | |
| uint32_t | get_input_type_id_at_index_impl (size_t index, std::index_sequence< Is... >) const |
| Helper: Get message ID for input type at runtime index. | |
| uint32_t | get_input_type_id_at_index (size_t index) const |
Protected Attributes | |
| std::vector< SubscriptionState > | input_subscriptions_ |
| std::mutex | subscription_mutex_ |
| const ModuleConfig * | config_ {nullptr} |
| RegistryMailbox< SystemRegistry > * | work_mailbox_ {nullptr} |
| std::string | module_name_ |
Subscription protocol handler.
Template parameters:
Definition at line 60 of file subscription.hpp.
|
protected |
Definition at line 63 of file subscription.hpp.
|
protected |
Definition at line 62 of file subscription.hpp.
|
protected |
Definition at line 65 of file subscription.hpp.
|
protected |
Definition at line 64 of file subscription.hpp.
|
inlineprotected |
Definition at line 341 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_multi_input_source().
|
inlineprotected |
Helper: Get message ID for input type at runtime index.
Definition at line 335 of file subscription.hpp.
|
inline |
Handle incoming SubscribeReply (consumer side)
Definition at line 226 of file subscription.hpp.
References commrat::SubscribeReplyPayload::actual_period_ms, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::input_subscriptions_, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::module_name_, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscription_mutex_, and commrat::SubscribeReplyPayload::success.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::handle_subscribe_reply().
|
inline |
Handle incoming SubscribeRequest (producer side)
Definition at line 190 of file subscription.hpp.
References commrat::SubscribeReplyPayload::actual_period_ms, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_, commrat::SubscribeRequestPayload::mailbox_index, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::module_name_, commrat::ModuleConfig::period, commrat::SubscribeRequestPayload::subscriber_base_addr, commrat::WORK, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::handle_subscribe_request().
|
inline |
Handle incoming UnsubscribeRequest (producer side)
Definition at line 248 of file subscription.hpp.
References commrat::UnsubscribeRequestPayload::subscriber_base_addr, commrat::UnsubscribeReplyPayload::success, commrat::WORK, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::handle_unsubscribe_request().
|
inline |
Definition at line 78 of file subscription.hpp.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::Module().
|
inline |
Definition at line 80 of file subscription.hpp.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::Module().
|
inline |
Definition at line 79 of file subscription.hpp.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::Module().
|
inline |
Subscribe to all configured input sources.
For multi-input modules: subscribes to each source in config_.input_sources For single-input modules: subscribes using legacy config fields
Definition at line 88 of file subscription.hpp.
References commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_, commrat::ModuleConfig::has_single_input(), commrat::ModuleConfig::input_instance_id(), commrat::ModuleConfig::input_sources(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::input_subscriptions_, commrat::ModuleConfig::input_system_id(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::module_name_, commrat::ModuleConfig::source_instance_id(), commrat::ModuleConfig::source_system_id(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscription_mutex_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::subscribe_to_all_sources().
|
inline |
Legacy single-input subscription (backward compatible)
Definition at line 120 of file subscription.hpp.
References commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::input_subscriptions_, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl().
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::subscribe_to_source().
|
inlineprotected |
Internal implementation: send SubscribeRequest to one source.
Definition at line 260 of file subscription.hpp.
References commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_, commrat::get_data_mbx_base(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::get_input_type_id_at_index(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::input_subscriptions_, commrat::ModuleConfig::instance_id(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::module_name_, commrat::ModuleConfig::period, commrat::SubscribeRequestPayload::subscriber_base_addr, commrat::ModuleConfig::system_id(), commrat::WORK, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source().
|
inline |
Unsubscribe from multi-input source.
Unsubscribe from multi-input source
Requires InputSource.input_index to be set (auto-populated during subscription)
Definition at line 163 of file subscription.hpp.
References commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_, commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::get_input_type_id_at_index(), commrat::MultiInputConfig::InputSource::input_index, commrat::MultiInputConfig::InputSource::instance_id, commrat::ModuleConfig::instance_id(), commrat::UnsubscribeRequestPayload::subscriber_base_addr, commrat::MultiInputConfig::InputSource::system_id, commrat::ModuleConfig::system_id(), commrat::WORK, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::unsubscribe_from_multi_input_source().
|
inline |
Unsubscribe from single-input source.
Definition at line 129 of file subscription.hpp.
References commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_, commrat::ModuleConfig::instance_id(), commrat::UnsubscribeRequestPayload::subscriber_base_addr, commrat::ModuleConfig::system_id(), commrat::WORK, and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::unsubscribe_from_source().
|
protected |
Definition at line 71 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_request(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_config(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_multi_input_source(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_source().
|
protected |
Definition at line 67 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_reply(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl().
|
protected |
Definition at line 73 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_reply(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_request(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_module_name(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl().
|
mutableprotected |
Definition at line 68 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_reply(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources().
|
protected |
Definition at line 72 of file subscription.hpp.
Referenced by commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_subscribe_request(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_unsubscribe_request(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_work_mailbox(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl(), commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_multi_input_source(), and commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_source().