CommRaT 2.0.0
C++20 Real-Time Messaging Framework
Loading...
Searching...
No Matches
commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple > Class Template Reference

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< SubscriptionStateinput_subscriptions_
 
std::mutex subscription_mutex_
 
const ModuleConfigconfig_ {nullptr}
 
RegistryMailbox< SystemRegistry > * work_mailbox_ {nullptr}
 
std::string module_name_
 

Detailed Description

template<typename Registry, bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
class commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >

Subscription protocol handler.

Template parameters:

  • Registry: Message registry (for message ID lookups)
  • has_continuous_input: Module has single continuous input
  • has_multi_input: Module has multiple synchronized inputs
  • InputData: Single input type (for has_continuous_input)
  • InputTypesTuple: Tuple of input types (for has_multi_input)
  • InputCount: Number of inputs (for has_multi_input)
  • OutputData: Single output type (or void for multi-output)
  • OutputTypesTuple: Tuple of output types (for address calculation)

Definition at line 60 of file subscription.hpp.

Member Typedef Documentation

◆ SubscribeReplyType

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
using commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::SubscribeReplyType = SubscribeReplyPayload
protected

Definition at line 63 of file subscription.hpp.

◆ SubscribeRequestType

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
using commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::SubscribeRequestType = SubscribeRequestPayload
protected

Definition at line 62 of file subscription.hpp.

◆ UnsubscribeReplyType

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
using commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::UnsubscribeReplyType = UnsubscribeReplyPayload
protected

Definition at line 65 of file subscription.hpp.

◆ UnsubscribeRequestType

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
using commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::UnsubscribeRequestType = UnsubscribeRequestPayload
protected

Definition at line 64 of file subscription.hpp.

Member Function Documentation

◆ get_input_type_id_at_index()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
uint32_t commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::get_input_type_id_at_index ( size_t  index) const
inlineprotected

◆ get_input_type_id_at_index_impl()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
template<size_t... Is>
uint32_t commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::get_input_type_id_at_index_impl ( size_t  index,
std::index_sequence< Is... >   
) const
inlineprotected

◆ handle_subscribe_reply()

◆ handle_subscribe_request()

◆ handle_unsubscribe_request()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
template<typename SubscriberMgr >
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::handle_unsubscribe_request ( const UnsubscribeRequestType req,
SubscriberMgr &  sub_mgr 
)
inline

◆ set_config()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_config ( const ModuleConfig cfg)
inline

◆ set_module_name()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_module_name ( const std::string &  name)
inline

◆ set_work_mailbox()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::set_work_mailbox ( RegistryMailbox< SystemRegistry > *  mbx)
inline

◆ subscribe_to_all_sources()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_all_sources ( )
inline

◆ subscribe_to_source()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source ( uint8_t  source_system_id,
uint8_t  source_instance_id 
)
inline

◆ subscribe_to_source_impl()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscribe_to_source_impl ( uint8_t  source_system_id,
uint8_t  source_instance_id,
size_t  source_index 
)
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().

◆ unsubscribe_from_multi_input_source()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_multi_input_source ( const MultiInputConfig::InputSource source)
inline

◆ unsubscribe_from_source()

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
void commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::unsubscribe_from_source ( uint8_t  source_system_id,
uint8_t  source_instance_id 
)
inline

Member Data Documentation

◆ config_

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
const ModuleConfig* commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::config_ {nullptr}
protected

◆ input_subscriptions_

◆ module_name_

◆ subscription_mutex_

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
std::mutex commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::subscription_mutex_
mutableprotected

◆ work_mailbox_

template<typename Registry , bool has_continuous_input, bool has_multi_input, typename InputData = void, typename InputTypesTuple = std::tuple<>, size_t InputCount = 0, typename OutputData = void, typename OutputTypesTuple = std::tuple<>>
RegistryMailbox<SystemRegistry>* commrat::SubscriptionProtocol< Registry, has_continuous_input, has_multi_input, InputData, InputTypesTuple, InputCount, OutputData, OutputTypesTuple >::work_mailbox_ {nullptr}
protected

The documentation for this class was generated from the following file: