![]() |
CommRaT 2.0.0
C++20 Real-Time Messaging Framework
|
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_ |
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:
Definition at line 48 of file publishing.hpp.
|
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.
|
inline |
Publish multiple outputs (tuple) to subscribers Each subscriber receives only outputs matching their subscribed type.
Definition at line 203 of file publishing.hpp.
References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs_impl().
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::publish_multi_outputs(), and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_multi_outputs_with_timestamp().
|
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().
|
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().
|
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_.
|
inline |
Publish TimsMessage<T> for single output Phase 6.10: Uses explicit timestamp from header Phase 7: Uses CMD mailbox and new addressing.
Definition at line 116 of file publishing.hpp.
References commrat::TimsMessage< PayloadT >::header, commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_name_, commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_ptr_, commrat::TimsMessage< PayloadT >::payload, and commrat::TimsHeader::timestamp.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::publish_tims_message().
|
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().
|
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_.
|
inline |
Definition at line 60 of file publishing.hpp.
References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_name_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::Module().
|
inline |
Definition at line 59 of file publishing.hpp.
References commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::module_ptr_.
Referenced by commrat::Module< UserRegistry, OutputSpec_, InputSpec_, CommandTypes >::Module().
|
protected |
Definition at line 54 of file publishing.hpp.
Referenced by commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_output_at_index(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_tims_message(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_to_subscribers(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::send_output_at_index(), and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::set_module_name().
|
protected |
Definition at line 53 of file publishing.hpp.
Referenced by commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_output_at_index(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_tims_message(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::publish_to_subscribers(), commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::send_output_at_index(), and commrat::Publisher< UserRegistry, OutputData, PublishMailboxT, ModuleType >::set_module_ptr().