Foo:
struct DDS_DataReaderQos reader_qos = DDS_DataReaderQos_INITIALIZER; DDS_DataReader* reader; struct DDS_DataReaderListener reader_listener = DDS_DataReaderListener_INITIALIZER; DDS_ReturnCode_t retcode; /* MyReaderListener_* functions are user defined to match DDS_ReaderListener functions */ reader_listener.on_requested_deadline_missed = MyReaderListener_RequestedDeadlineMissed; reader_listener.on_requested_incompatible_qos = MyReaderListener_RequestedIncompatibleQos; reader_listener.on_sample_rejected = MyReaderListener_SampleRejected; reader_listener.on_liveliness_changed = MyReaderListener_LivelinessChanged; reader_listener.on_data_available = MyReaderListener_DataAvailable; reader_listener.on_subscription_match = MyReaderListener_SubscriptionMatch; reader_listener.on_sample_lost = MyReaderListener_SampleLost; retcode = DDS_Subscriber_get_default_datareader_qos( subscriber, &reader_qos); if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to get default datareader qos\n"); } reader = DDS_Subscriber_create_datareader(subscriber, DDS_Topic_as_topicdescription(topic), &reader_qos, &reader_listener /* or NULL */, DDS_STATUS_MASK_ALL); if (reader == NULL) { printf("***Error: failed to create reader\n"); }
FooDataReader* reader = ...;
Foo
struct Foo* data = ...; /* user data of type Foo */ retcode = FooDataReader_get_key_value(reader, data, &instance_handle); if (retcode != DDS_RETCODE_OK) { /* ... check for cause of failure */ }
T
. The samples are removed from the Service. The caller is responsible for deallocating the buffers. DDS_SampleStateMask sample_state_mask = DDS_ANY_SAMPLE_STATE; DDS_ViewStateMask view_state_mask = DDS_ANY_ VIEW_STATE; DDS_InstanceStateMask instance_state_mask = DDS_ANY_INSTANCE_STATE; struct FooSeq data_seq = FooSeq_INITIALIZER; struct DDS_SampleInfoSeq info_seq = DDS_SampleInfoSeq_INITIALIZER; DDS_ReturnCode_t retcode; retcode = FooDataReader_take(reader, &data_seq, &info_seq, max_samples, sample_state_mask, view_state_mask, instance_state_mask); if (retcode == DDS_RETCODE_NO_DATA) { return; } else { if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to access data from the reader\n"); }
struct Foo* data = NULL; struct DDS_SampleInfo* info = NULL; int i; for(i = 0; i < FooSeq_get_length(&data_seq); ++i) { info = DDS_SampleInfoSeq_get_reference(&info_seq, i); data = FooSeq_get_reference(&data_seq, i); /* Note that depending on the info->sample_state it is possible that data will be NULL */ /* ... */ }
DDS_ReturnCode_t retcode; retcode = FooDataReader_return_loan(reader, &data_seq, &info_seq); if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to return loan\n"); }
Foo
. The samples are not removed from the Service. It remains responsible for deallocating the buffers. DDS_SampleStateMask sample_state_mask = DDS_ANY_SAMPLE_STATE; DDS_ViewStateMask view_state_mask = DDS_ANY_ VIEW_STATE; DDS_InstanceStateMask instance_state_mask = DDS_ANY_INSTANCE_STATE; struct FooSeq data_seq = FooSeq_INITIALIZER; struct DDS_SampleInfoSeq info_seq = DDS_SampleInfoSeq_INITIALIZER; DDS_ReturnCode_t retcode; retcode = FooDataReader_read(reader, &data_seq, &info_seq, max_samples, sample_state_mask, view_state_mask, instance_state_mask); if (retcode == DDS_RETCODE_NO_DATA) { return; } else if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to access data from the reader\n"); }
struct Foo* data = NULL; struct DDS_SampleInfo* info = NULL; int i; for(i = 0; i < FooSeq_get_length(&data_seq); ++i) { info = DDS_SampleInfoSeq_get_reference(&info_seq, i); data = FooSeq_get_reference(&data_seq, i); /* Note that depending on the info->sample_state it is possible that data will be NULL */ /* ... */ }
retcode = FooDataReader_return_loan(reader, &data_seq, &info_seq); if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to return loan\n"); }
DDS_ReturnCode_t retcode; retcode = DDS_Subscriber_delete_datareader(subscriber, reader); if (retcode != DDS_RETCODE_OK) { printf("***Error: failed to delete reader\n"); }