I'm using DDS 5.3.0.3, programming in modern C++. I'm writing an application to subscribe to data. I'd like to observe the timestamps - both send-time and receive-time.
I'm able to access the send-time, but the receive-time fails to compile:
200: auto samples = dataReader_[index].take(); 201: for (auto & samp : samples) 202: { 203: if (samp.info().valid()) 204: { 205: dds::core::Time currSendTime = samp.info().source_timestamp(); 206: dds::core::Time currReceiveTime = samp.info().reception_timestamp();
The compile error is:
RxController.cpp:206:75: error: 'const InfoType {aka const class dds::sub::TSampleInfo<rti::sub::SampleInfoImpl>}' has no member named 'reception_timestamp'; did you mean 'source_timestamp'? | dds::core::Time currReceiveTime = samp.info().reception_timestamp(); | ^~~~~~~~~~~~~~~~~~~
Looking in the SampleInfoImpl.hpp and TSampleInfo.hpp, I can see that "reception_timestamp() is treated as an "extension". It is in SampleInfoImpl.hpp but not TSampleInfo.hpp.
Am I making a silly mistake here?
I was able to fix this with some code additions in the TSamplInfo header:
I am rather unhappy that I had to change DDS header code to get a documented "reception timestamp" feature (althougn it is documented as an RTI extension to DDS...). I feel this puts me into the territory of "unsupported"
Is there an alternative (supported) solution to allow me to get the reception timestamp? Should I file a support request to have RTI fix the code? Or am I just looking in the wrong place, and the data is available in some other [supported] way?
Hi,
SampleInfo::reception_timestamp() is an RTI extension (it's not DDS-standard). To access extension member functions, you need to use the overloaded arrow (->) operator, as described in the API reference here.
This is how your code would look like after this change:
I hope this helps,
Alex