CommRaT 2.0.0
C++20 Real-Time Messaging Framework
Loading...
Searching...
No Matches
commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType > Class Template Reference

Publishing logic for producer modules. More...

#include <commrat/module/services/publishing.hpp>

Public Member Functions

void set_module_ptr (ModuleType *ptr)
 
void set_module_name (const std::string &name)
 
template<typename T = OutputData>
requires (!std::is_void_v<T>)
void publish_to_subscribers (T &data)
 Single-output publishing (only enabled when OutputData is not void) Publishes data to all subscribers' DATA mailboxes.
 
template<typename T >
void publish_tims_message (TimsMessage< T > &tims_msg)
 Publish TimsMessage<T> for single output Phase 6.10: Uses explicit timestamp from header Phase 7: Uses CMD mailbox and new addressing.
 
template<std::size_t Index, typename OutputType >
void send_output_at_index (uint16_t subscriber_type_id_low, OutputType &output, uint32_t dest_mailbox)
 Send output at given index if type matches subscriber's expected type Phase 7.4: Uses Module's get_publish_mailbox<Index>() for per-output mailboxes.
 
template<typename... Ts, std::size_t... Is>
void publish_multi_outputs_impl (std::tuple< Ts... > &outputs, std::index_sequence< Is... >)
 Multi-output publishing implementation Phase 7: Each output publishes to its own subscriber list.
 
template<std::size_t Index, typename OutputType >
void publish_output_at_index (OutputType &output)
 Publish specific output to its subscribers (Phase 7) Uses CMD mailbox (one per output) and new addressing.
 
template<typename... Ts>
void publish_multi_outputs (std::tuple< Ts... > &outputs)
 Publish multiple outputs (tuple) to subscribers Each subscriber receives only outputs matching their subscribed type.
 
template<typename... Ts>
void publish_multi_outputs_with_timestamp (std::tuple< Ts... > &outputs, uint64_t timestamp_ns)
 Publish multi-outputs with explicit timestamp Phase 6.10: Wraps each output in TimsMessage with timestamp.
 

Static Public Member Functions

template<typename T >
static TimsMessage< T > create_tims_message (T &&payload, uint64_t timestamp_ns)
 Create TimsMessage with explicit timestamp Phase 6.10: Single source of truth for timestamps (header.timestamp)
 

Protected Attributes

ModuleType * module_ptr_ {nullptr}
 
std::string module_name_
 

Detailed Description

template<typename UserRegistry, typename OutputData, typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
class commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >

Publishing logic for producer modules.

Handles publishing to subscribers with type-specific filtering. After unification, ALL modules use MailboxSets and access subscribers via module_ptr_->get_output_subscribers(index).

Phase 7: Uses CMD mailbox (index 0) for publishing, calculates dest as subscriber.base_addr | subscriber.mailbox_index.

Template parameters:

  • UserRegistry: User message registry
  • OutputData: Single output type (or void for multi-output)
  • PublishMailboxT: Publish mailbox type (defaults to TypedMailbox<UserRegistry>)
  • ModuleType: Module type for mailbox/subscriber access (REQUIRED after unification)

Definition at line 48 of file publishing.hpp.

Member Function Documentation

◆ create_tims_message()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename T >
static TimsMessage< T > commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::create_tims_message ( T &&  payload,
uint64_t  timestamp_ns 
)
inlinestatic

Create TimsMessage with explicit timestamp Phase 6.10: Single source of truth for timestamps (header.timestamp)

Definition at line 67 of file publishing.hpp.

References commrat::TimsMessage< PayloadT >::header, and commrat::TimsHeader::msg_type.

◆ publish_multi_outputs()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename... Ts>
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs ( std::tuple< Ts... > &  outputs)
inline

◆ publish_multi_outputs_impl()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename... Ts, std::size_t... Is>
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs_impl ( std::tuple< Ts... > &  outputs,
std::index_sequence< Is... >   
)
inline

Multi-output publishing implementation Phase 7: Each output publishes to its own subscriber list.

Definition at line 168 of file publishing.hpp.

Referenced by commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs().

◆ publish_multi_outputs_with_timestamp()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename... Ts>
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs_with_timestamp ( std::tuple< Ts... > &  outputs,
uint64_t  timestamp_ns 
)
inline

Publish multi-outputs with explicit timestamp Phase 6.10: Wraps each output in TimsMessage with timestamp.

Note: Currently delegates to publish_multi_outputs (timestamp not yet used) Future enhancement: Wrap each output in TimsMessage with timestamp

Definition at line 215 of file publishing.hpp.

References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs().

Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::publish_multi_outputs_with_timestamp().

◆ publish_output_at_index()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<std::size_t Index, typename OutputType >
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_output_at_index ( OutputType &  output)
inline

Publish specific output to its subscribers (Phase 7) Uses CMD mailbox (one per output) and new addressing.

Definition at line 178 of file publishing.hpp.

References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_name_, and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_ptr_.

◆ publish_tims_message()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename T >
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_tims_message ( TimsMessage< T > &  tims_msg)
inline

◆ publish_to_subscribers()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<typename T = OutputData>
requires (!std::is_void_v<T>)
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_to_subscribers ( T &  data)
inline

Single-output publishing (only enabled when OutputData is not void) Publishes data to all subscribers' DATA mailboxes.

Phase 7: Uses CMD mailbox (index 0) and new addressing (base | mailbox_index)

Definition at line 89 of file publishing.hpp.

References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_name_, and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_ptr_.

Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::publish_to_subscribers().

◆ send_output_at_index()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
template<std::size_t Index, typename OutputType >
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::send_output_at_index ( uint16_t  subscriber_type_id_low,
OutputType &  output,
uint32_t  dest_mailbox 
)
inline

Send output at given index if type matches subscriber's expected type Phase 7.4: Uses Module's get_publish_mailbox<Index>() for per-output mailboxes.

After unification, ModuleType is always set (never void), so we always use the MailboxSet approach via get_publish_mailbox_public<Index>().

Definition at line 145 of file publishing.hpp.

References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_name_, and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_ptr_.

◆ set_module_name()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::set_module_name ( const std::string &  name)
inline

◆ set_module_ptr()

template<typename UserRegistry , typename OutputData , typename PublishMailboxT = TypedMailbox<UserRegistry>, typename ModuleType = void>
void commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::set_module_ptr ( ModuleType *  ptr)
inline

Member Data Documentation

◆ module_name_

◆ module_ptr_


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