RTC Toolkit
2.0.0
|
Implements DDS communication using FastDDS. More...
#include <ddsWaitSet.hpp>
Public Types | |
using | Alloc = std::pmr::polymorphic_allocator< std::byte > |
Public Member Functions | |
DdsWaitSet (const DdsParams ¶ms, Alloc const &alloc={}) | |
Constructs a DDS subscriber from given configuration parameters. More... | |
virtual | ~DdsWaitSet () noexcept |
Destroys the DDS subscriber and releases all DDS resources. More... | |
DdsWaitSet (DdsWaitSet &&rhs)=delete | |
DdsWaitSet & | operator= (DdsWaitSet &&rhs)=delete |
AgnosticDataSamples & | GetSamples () noexcept override |
Returns reference to data structure holding taken data samples. More... | |
std::error_code | Take (std::chrono::nanoseconds timeout) noexcept override |
Takes new samples from DDS readers and updates data structure accessable from GetSamples() More... | |
size_t | GetNumberOfTopics () const noexcept override |
Returns the number of configured topics. More... | |
std::string | GetTopicName (size_t index) const noexcept override |
Returns a string containing the name of a configured topic. More... | |
std::error_code | ReturnLoan (std::uint8_t idx, DdsSampleSeq &samples, DdsInfoSeq &infos) noexcept override |
Returns loaned sample sequence. More... | |
Public Member Functions inherited from rtctk::telSub::DdsWaitSetIf | |
DdsWaitSetIf () RTCTK_NOEXCEPT | |
virtual | ~DdsWaitSetIf () RTCTK_NOEXCEPT |
Implements DDS communication using FastDDS.
using rtctk::telSub::DdsWaitSet::Alloc = std::pmr::polymorphic_allocator<std::byte> |
Constructs a DDS subscriber from given configuration parameters.
The constructor will initialise the DDS subsystem and allocate necessary resources by constructing appropriate rtctk::componentFramework::DdsSub object. Individual DDS topic objects and DDS readers are created inside rtctk::componentFramework::DdsSub for each topic found in the params.m_topics vector.
There is a one to one correspondence between the topic in params.m_topics
and the DDS reader and DDS topic object created. The order of the topics matters and is preserved, meaning that the n'th topic in params.m_topics will equal GetTopicName(n) after successful construction. In addition, the TakeSamples method will return DDS samples for the n'th DDS reader in its output parameter samples
[n], which also corresponds to the configured topic GetTopicName(n)
.
params | The structure containing all needed parameters to construct the DDS objects. |
|
virtualnoexcept |
Destroys the DDS subscriber and releases all DDS resources.
The destructor will release all resources associate with this subscriber object that were allocated by DDS. This is done by deleting all DDS object that were created. Errors during this procedure cannot be propagated as exceptions, therefore the errors will simply be logged and execution allowed to continue.
|
delete |
|
overridevirtualnoexcept |
Returns the number of configured topics.
This returns the number of topics that were configured during construction of the subscriber object. This corresponds to the size of the DdsParams::m_topics vector passed to the constructor.
Implements rtctk::telSub::DdsWaitSetIf.
|
overridevirtualnoexcept |
Returns reference to data structure holding taken data samples.
To update structure with new samples TakeSamples() must be used.
Implements rtctk::telSub::DdsWaitSetIf.
|
overridevirtualnoexcept |
Returns a string containing the name of a configured topic.
This returns the name of a configured DDS topic as a string. The topic name is associated with the index'th DDS reader and will also identify the topic for samples
[index], which is the output parameter vector filled by TakeSamples containing newly arrived DDS samples for the index'th DDS reader.
[in] | index | This selects which topic name to fetch. The value must be in the range 0 <= index and index < GetNumberOfTopics(). |
Implements rtctk::telSub::DdsWaitSetIf.
|
delete |
|
overridevirtualnoexcept |
Returns loaned sample sequence.
After invoking this method successfully the provided sequences will be emptied.
idx | Topic index. |
samples | Sample sequence. |
infos | Sample information sequence. |
Implements rtctk::telSub::SeqLoanerIf.
|
overridevirtualnoexcept |
Takes new samples from DDS readers and updates data structure accessable from GetSamples()
The method waits for new DDS samples to become available on one or more of the DDS topic readers as needed to fill up AgnosticDataSamples from GetSamples() with a non-empty sample sequence for each topic.
An empty / zero error code is returned if the operation completed successfully, meaning at least one non-empty sample sequence was taken.
If no samples were available within the timeout period then a std::errc::timed_out
error code is returned. If some other error occurred, an appropriate error code is returned.
It is expected that the caller processes the samples and when done with them calls AgnosticAgnosticDataSamples::Clear() to return the samples to DDS. It is not required that all sample sequences are cleared at the same time.
[in] | timeout | The maximum amount of time to wait for this operation to complete, measured in nanoseconds. |
The following is the list of possible error codes returned:
0
std::errc::timed_out
std::errc::protocol_error
std::errc::bad_address
Implements rtctk::telSub::DdsWaitSetIf.