Contains the DDS.Subscriber, DDS.DataReader, DDS.ReadCondition, DDS.QueryCondition, and DDS.TopicQuery classes, as well as the DDS.SubscriberListener and DDS.DataReaderListener interfaces, and more generally, all that is needed on the subscription side.
Data is made available to the application by the following operations on DDS.DataReader objects: FooDataReader.read, FooDataReader.read_w_condition, \endif FooDataReader.take, \ifnot CPP2_LANGUAGE_ONLY FooDataReader.take_w_condition, and the other variants of read() and take().
The general semantics of the read() operation is that the application only gets access to the corresponding data (i.e. a precise instance value); the data remains the responsibility of RTI Connext and can be read again.
The semantics of the take() operations is that the application takes full responsibility for the data; that data will no longer be available locally to dds. Consequently, it is possible to access the same information multiple times only if all previous accesses were read() operations, not take().
Applications access data using the following DDS.DataReader operations and their variants: dds::sub::DataReader::read(), dds::sub::DataReader::take(), and dds::sub::DataReader::select().
These operations return a collection, dds::sub::LoanedSamples, consisting of which contain the actual data and dds::sub::SampleInfo objects.
The way RTI Connext builds the collection depends on QoS policies set on the dds::sub::DataReader and dds::sub::Subscriber, the source_timestamp of the samples, and, when using dds::sub::DataReader::select(), the parameters used to build the dds::sub::Selector.
These operations are non-blocking and just deliver what is currently available.
Once the data samples are available to the DataReader, the application can read or take them.
To access data coherently, or in order, the DDSPresentationQosModule QoS must be set properly.