Safe DDS
eprosima::safedds::protocol::rtps::Writer Class Reference

RTPS Writer implementation. More...

#include <Writer.hpp>

Public Member Functions

 Writer (const GUID &writer_guid, const WriterProperties &properties, ICacheChangeDatabaseQuerier &database_querier, IMessageSink &message_sink, ICacheChangeRelevanceQuerier &relevance_querier, IWriterObserver &writer_observer, memory::IMap< GUID, ProxyReader > &proxy_map) noexcept
 Writer constructor. More...
 
virtual ~Writer () noexcept=default
 Virtual destructor. More...
 
 Writer (const Writer &) noexcept=delete
 Copy deleted. More...
 
 Writer (Writer &&) noexcept=delete
 Movement deleted. More...
 
Writeroperator= (const Writer &) noexcept=delete
 Copy operator deleted. More...
 
Writeroperator= (Writer &&) noexcept=delete
 Movement operator deleted. More...
 
virtual void assert_protocol_liveliness () noexcept
 Trigger manual liveliness assertion. More...
 
void process_nackfrag (const ProcessorState &processor_state, const Submessage< NackFrag > &nackfrag) noexcept override
 
void process_acknack (const ProcessorState &processor_state, const Submessage< AckNack > &acknack) noexcept override
 
ReturnCode set_last_sequence_number (const SequenceNumber &sn) noexcept override
 
SequenceNumber get_last_sequence_number () const noexcept override
 
ReturnCode matched_reader_add (const GUID &reader_guid, const Reliability &reader_reliability, bool send_historical_data) noexcept override
 
void matched_reader_remove (const GUID &reader_guid) noexcept override
 
bool matched_reader_exists (const GUID &reader_guid) const noexcept override
 
void matched_reader_set_group (const GUID &reader_guid, const EndpointGroup &group) noexcept override
 
GUID guid () const noexcept override
 
Reliability reliability () const noexcept override
 
void request_remote_acknowledgements () noexcept override
 
void spin (const execution::TimePoint &timepoint) noexcept override
 
bool has_pending_work () const noexcept override
 
execution::TimePoint get_next_work_timepoint () const noexcept override
 

Static Public Attributes

constexpr static uint32_t MAX_MESSAGE_ELEMENTS = 8
 Writer max submessages for protocol::MessageElement arrays: RTPS Header + HeaderExtension + InfoTimestamp + Data + InlineQoS + Payload + Padding + HeartBeat. More...
 

Protected Member Functions

void handle_heartbeat_timer () noexcept
 Handle internal heartbeat timer. More...
 
void stop_timer_if_required () noexcept
 Stop internal heartbeat timer if required. More...
 
ProxyReader * get_first_proxyreader_with_work () const noexcept
 retrieves a ProxyReader with pending work. More...
 
void process_proxyreader (ProxyReader &reader, const execution::TimePoint &timepoint) noexcept
 process communication with a certain ProxyReader. More...
 
ReturnCode check_guid (const GUID &target_guid) const noexcept
 Checks GUID target for an incoming submsg. More...
 
void notify_acknowledged_sequence_numbers () noexcept
 Notify if corresponds that a sequence number has been acknowledged by all readers. More...
 
bool is_reliable_communication (const ProxyReader &proxy_reader) const noexcept
 Checks if communication with a proxy reader is reliable. More...
 
void add_data_submsg (const SequenceNumber &sn, const CacheChangeInfo &change_info, const memory::IConstByteArrayView &payload, const memory::IConstByteArrayView &inline_qos, Submessage< Data > &data, MessageHandler< MAX_MESSAGE_ELEMENTS > &message_handler) const noexcept
 Fills and includes a Data submessage into a MessageHandler. More...
 
void add_datafrag_submsg (const CacheChangeInfo &change_info, const SequenceNumber &sn, const FragmentNumber &fragment_number, bool is_last_fragment, const memory::IConstByteArrayView &payload, const memory::IConstByteArrayView &inline_qos, Submessage< DataFrag > &datafrag, MessageHandler< MAX_MESSAGE_ELEMENTS > &message_handler) const noexcept
 Fills and includes a Data submessage into a MessageHandler. More...
 
void add_heartbeat_submsg (Submessage< Heartbeat > &heartbeat, MessageHandler< MAX_MESSAGE_ELEMENTS > &message_handler, bool final_flag, bool liveliness_flag, const SequenceNumber &first_available_sn) noexcept
 Fills and includes a Heartbeat submessage into a MessageHandler. More...
 
void add_gap_submsg (const SequenceNumber &first_irrelevant, const SequenceNumber &first_relevant, Submessage< Gap > &gap, MessageHandler< MAX_MESSAGE_ELEMENTS > &message_handler) const noexcept
 Fills and includes a Gap submessage into a MessageHandler. More...
 

Protected Attributes

GUID guid_ {}
 Writer guid. More...
 
WriterProperties properties_
 Writer properties. More...
 
memory::IMap< GUID, ProxyReader > & matched_readers_
 Matched Readers. More...
 
ICacheChangeDatabaseQuerierdatabase_querier_
 CacheChange Database querier. More...
 
OutputIntegritySink integrity_sink_
 Output Integrity Sink. More...
 
IMessageSinkmessage_sink_
 Message sink. More...
 
ICacheChangeRelevanceQuerierrelevance_querier_
 CacheChange relevance querier. More...
 
IWriterObserverwriter_observer_
 WriterObserver to acknowledge sn. More...
 
SequenceNumber last_sequence_number_ {0, 0}
 last generated sequence number. More...
 
SequenceNumber first_unacknowledged_sn_ {0, 1}
 first acknowledge by all sequence number. More...
 
uint32_t payload_max_size_ = 0
 Max allowed DATA payload size. More...
 
uint16_t fragment_max_size_ = 0
 Max allowed DATAFRAG payload size. More...
 
bool need_confirmation_check_ = false
 Flag to indicate a required confirmation status. More...
 
int32_t last_sent_heartbeat_count_ {0}
 Sent heartbeat counter. More...
 
execution::Timer heartbeat_timer_ {}
 Heartbeat period timer. More...
 
ProxyReader * proxyreader_with_work_ {nullptr}
 ProxyReader with work cache. More...
 
uint32_t next_proxyreader_index_ {0}
 Next proxyreader index for round-robin processing. More...
 

Friends

struct ProcessProxyReaderStatus
 Friend class. More...
 

Detailed Description

RTPS Writer implementation.

Constructor & Destructor Documentation

◆ Writer() [1/3]

eprosima::safedds::protocol::rtps::Writer::Writer ( const GUID writer_guid,
const WriterProperties &  properties,
ICacheChangeDatabaseQuerier database_querier,
IMessageSink message_sink,
ICacheChangeRelevanceQuerier relevance_querier,
IWriterObserver writer_observer,
memory::IMap< GUID, ProxyReader > &  proxy_map 
)
explicitnoexcept

Writer constructor.

Parameters
[in]writer_guidwriter GUID.
[in]propertieswriter properties.
[in,out]database_querierreference to database querier. Ownership is not taken.
[in,out]message_sinksink for messages. Ownership is not taken.
[in,out]relevance_querierreference to cache change relevance querier. Ownership is not taken.
[in,out]writer_observerreference to writer observer. Ownership is not taken.
[in,out]proxy_mapstorage for ProxyReaders. Ownership is not taken.

◆ ~Writer()

virtual eprosima::safedds::protocol::rtps::Writer::~Writer ( )
virtualdefaultnoexcept

Virtual destructor.

◆ Writer() [2/3]

eprosima::safedds::protocol::rtps::Writer::Writer ( const Writer )
deletenoexcept

Copy deleted.

◆ Writer() [3/3]

eprosima::safedds::protocol::rtps::Writer::Writer ( Writer &&  )
deletenoexcept

Movement deleted.

Member Function Documentation

◆ add_data_submsg()

void eprosima::safedds::protocol::rtps::Writer::add_data_submsg ( const SequenceNumber &  sn,
const CacheChangeInfo &  change_info,
const memory::IConstByteArrayView payload,
const memory::IConstByteArrayView inline_qos,
Submessage< Data > &  data,
MessageHandler< MAX_MESSAGE_ELEMENTS > &  message_handler 
) const
protectednoexcept

Fills and includes a Data submessage into a MessageHandler.

Parameters
snsequence number of the cache change.
change_infocache change information.
payloadcache change fragmented payload.
inline_qoscache change inline qos values.
[out]datareference to Data submessage to fill.
[in,out]message_handlerreference to RTPS message handler.

◆ add_datafrag_submsg()

void eprosima::safedds::protocol::rtps::Writer::add_datafrag_submsg ( const CacheChangeInfo &  change_info,
const SequenceNumber &  sn,
const FragmentNumber &  fragment_number,
bool  is_last_fragment,
const memory::IConstByteArrayView payload,
const memory::IConstByteArrayView inline_qos,
Submessage< DataFrag > &  datafrag,
MessageHandler< MAX_MESSAGE_ELEMENTS > &  message_handler 
) const
protectednoexcept

Fills and includes a Data submessage into a MessageHandler.

Parameters
change_infocache change information.
snsequence number of the cache change.
fragment_numbercache change information.
is_last_fragmentis last fragment flag.
payloadcache change complete payload.
inline_qoscache change inline qos values.
[out]datafragreference to DataFrag submessage to fill.
[in,out]message_handlerreference to RTPS message handler.

◆ add_gap_submsg()

void eprosima::safedds::protocol::rtps::Writer::add_gap_submsg ( const SequenceNumber &  first_irrelevant,
const SequenceNumber &  first_relevant,
Submessage< Gap > &  gap,
MessageHandler< MAX_MESSAGE_ELEMENTS > &  message_handler 
) const
protectednoexcept

Fills and includes a Gap submessage into a MessageHandler.

Parameters
first_irrelevantfirst sequence number of the irrelevant cache changes.
first_relevantfirst relevant change found after first_irrelevant.
[out]gapreference to Gap submessage to fill.
[in,out]message_handlerreference to RTPS message handler.

◆ add_heartbeat_submsg()

void eprosima::safedds::protocol::rtps::Writer::add_heartbeat_submsg ( Submessage< Heartbeat > &  heartbeat,
MessageHandler< MAX_MESSAGE_ELEMENTS > &  message_handler,
bool  final_flag,
bool  liveliness_flag,
const SequenceNumber &  first_available_sn 
)
protectednoexcept

Fills and includes a Heartbeat submessage into a MessageHandler.

Parameters
[out]heartbeatreference to Heartbeat submessage to fill.
[in,out]message_handlerreference to RTPS message handler.
final_flagHeartbeat final flag.
liveliness_flagHeartbeat liveliness flag.
[in]first_available_snFirst available sequence number in database.

◆ assert_protocol_liveliness()

virtual void eprosima::safedds::protocol::rtps::Writer::assert_protocol_liveliness ( )
virtualnoexcept

Trigger manual liveliness assertion.

This method will trigger output liveliness heartbeats to matched readers on the next spin

◆ check_guid()

ReturnCode eprosima::safedds::protocol::rtps::Writer::check_guid ( const GUID target_guid) const
protectednoexcept

Checks GUID target for an incoming submsg.

Parameters
target_guidmessage target guid.
Returns
ReturnCode.

◆ get_first_proxyreader_with_work()

ProxyReader* eprosima::safedds::protocol::rtps::Writer::get_first_proxyreader_with_work ( ) const
protectednoexcept

retrieves a ProxyReader with pending work.

Returns
ProxyReader*.

◆ get_last_sequence_number()

SequenceNumber eprosima::safedds::protocol::rtps::Writer::get_last_sequence_number ( ) const
overridenoexcept

◆ get_next_work_timepoint()

execution::TimePoint eprosima::safedds::protocol::rtps::Writer::get_next_work_timepoint ( ) const
overridenoexcept

◆ guid()

GUID eprosima::safedds::protocol::rtps::Writer::guid ( ) const
overridenoexcept

◆ handle_heartbeat_timer()

void eprosima::safedds::protocol::rtps::Writer::handle_heartbeat_timer ( )
protectednoexcept

Handle internal heartbeat timer.

◆ has_pending_work()

bool eprosima::safedds::protocol::rtps::Writer::has_pending_work ( ) const
overridenoexcept

◆ is_reliable_communication()

bool eprosima::safedds::protocol::rtps::Writer::is_reliable_communication ( const ProxyReader &  proxy_reader) const
protectednoexcept

Checks if communication with a proxy reader is reliable.

Parameters
proxy_readerreference to proxyreader.
Returns
true if reliable, false otherwise.

◆ matched_reader_add()

ReturnCode eprosima::safedds::protocol::rtps::Writer::matched_reader_add ( const GUID reader_guid,
const Reliability &  reader_reliability,
bool  send_historical_data 
)
overridenoexcept

◆ matched_reader_exists()

bool eprosima::safedds::protocol::rtps::Writer::matched_reader_exists ( const GUID reader_guid) const
overridenoexcept

◆ matched_reader_remove()

void eprosima::safedds::protocol::rtps::Writer::matched_reader_remove ( const GUID reader_guid)
overridenoexcept

◆ matched_reader_set_group()

void eprosima::safedds::protocol::rtps::Writer::matched_reader_set_group ( const GUID reader_guid,
const EndpointGroup group 
)
overridenoexcept

◆ notify_acknowledged_sequence_numbers()

void eprosima::safedds::protocol::rtps::Writer::notify_acknowledged_sequence_numbers ( )
protectednoexcept

Notify if corresponds that a sequence number has been acknowledged by all readers.

◆ operator=() [1/2]

Writer& eprosima::safedds::protocol::rtps::Writer::operator= ( const Writer )
deletenoexcept

Copy operator deleted.

◆ operator=() [2/2]

Writer& eprosima::safedds::protocol::rtps::Writer::operator= ( Writer &&  )
deletenoexcept

Movement operator deleted.

◆ process_acknack()

void eprosima::safedds::protocol::rtps::Writer::process_acknack ( const ProcessorState &  processor_state,
const Submessage< AckNack > &  acknack 
)
overridenoexcept

◆ process_nackfrag()

void eprosima::safedds::protocol::rtps::Writer::process_nackfrag ( const ProcessorState &  processor_state,
const Submessage< NackFrag > &  nackfrag 
)
overridenoexcept

◆ process_proxyreader()

void eprosima::safedds::protocol::rtps::Writer::process_proxyreader ( ProxyReader &  reader,
const execution::TimePoint timepoint 
)
protectednoexcept

process communication with a certain ProxyReader.

Parameters
readerSequenceNumberSet to update.
timepointMaximum TimePoint to execute this method.

◆ reliability()

Reliability eprosima::safedds::protocol::rtps::Writer::reliability ( ) const
overridenoexcept

◆ request_remote_acknowledgements()

void eprosima::safedds::protocol::rtps::Writer::request_remote_acknowledgements ( )
overridenoexcept

◆ set_last_sequence_number()

ReturnCode eprosima::safedds::protocol::rtps::Writer::set_last_sequence_number ( const SequenceNumber &  sn)
overridenoexcept

◆ spin()

void eprosima::safedds::protocol::rtps::Writer::spin ( const execution::TimePoint timepoint)
overridenoexcept

◆ stop_timer_if_required()

void eprosima::safedds::protocol::rtps::Writer::stop_timer_if_required ( )
protectednoexcept

Stop internal heartbeat timer if required.

Friends And Related Function Documentation

◆ ProcessProxyReaderStatus

friend struct ProcessProxyReaderStatus
friend

Friend class.

Member Data Documentation

◆ database_querier_

ICacheChangeDatabaseQuerier& eprosima::safedds::protocol::rtps::Writer::database_querier_
protected

CacheChange Database querier.

◆ first_unacknowledged_sn_

SequenceNumber eprosima::safedds::protocol::rtps::Writer::first_unacknowledged_sn_ {0, 1}
protected

first acknowledge by all sequence number.

◆ fragment_max_size_

uint16_t eprosima::safedds::protocol::rtps::Writer::fragment_max_size_ = 0
protected

Max allowed DATAFRAG payload size.

◆ guid_

GUID eprosima::safedds::protocol::rtps::Writer::guid_ {}
protected

Writer guid.

◆ heartbeat_timer_

execution::Timer eprosima::safedds::protocol::rtps::Writer::heartbeat_timer_ {}
protected

Heartbeat period timer.

◆ integrity_sink_

OutputIntegritySink eprosima::safedds::protocol::rtps::Writer::integrity_sink_
protected

Output Integrity Sink.

◆ last_sent_heartbeat_count_

int32_t eprosima::safedds::protocol::rtps::Writer::last_sent_heartbeat_count_ {0}
protected

Sent heartbeat counter.

◆ last_sequence_number_

SequenceNumber eprosima::safedds::protocol::rtps::Writer::last_sequence_number_ {0, 0}
protected

last generated sequence number.

◆ matched_readers_

memory::IMap<GUID, ProxyReader>& eprosima::safedds::protocol::rtps::Writer::matched_readers_
protected

Matched Readers.

◆ MAX_MESSAGE_ELEMENTS

constexpr static uint32_t eprosima::safedds::protocol::rtps::Writer::MAX_MESSAGE_ELEMENTS = 8
staticconstexpr

Writer max submessages for protocol::MessageElement arrays: RTPS Header + HeaderExtension + InfoTimestamp + Data + InlineQoS + Payload + Padding + HeartBeat.

◆ message_sink_

IMessageSink& eprosima::safedds::protocol::rtps::Writer::message_sink_
protected

Message sink.

◆ need_confirmation_check_

bool eprosima::safedds::protocol::rtps::Writer::need_confirmation_check_ = false
protected

Flag to indicate a required confirmation status.

◆ next_proxyreader_index_

uint32_t eprosima::safedds::protocol::rtps::Writer::next_proxyreader_index_ {0}
mutableprotected

Next proxyreader index for round-robin processing.

◆ payload_max_size_

uint32_t eprosima::safedds::protocol::rtps::Writer::payload_max_size_ = 0
protected

Max allowed DATA payload size.

◆ properties_

WriterProperties eprosima::safedds::protocol::rtps::Writer::properties_
protected

Writer properties.

◆ proxyreader_with_work_

ProxyReader* eprosima::safedds::protocol::rtps::Writer::proxyreader_with_work_ {nullptr}
mutableprotected

ProxyReader with work cache.

Note
mutable justification: Used for optimization of proxy readers with work

◆ relevance_querier_

ICacheChangeRelevanceQuerier& eprosima::safedds::protocol::rtps::Writer::relevance_querier_
protected

CacheChange relevance querier.

◆ writer_observer_

IWriterObserver& eprosima::safedds::protocol::rtps::Writer::writer_observer_
protected

WriterObserver to acknowledge sn.


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