To receive updates about MyTopic, for the MyDataReaderListener
class, open the Features window for the on_data_available operation
(under the SubscriberPkg package), and on the Implementation tab,
add the following code, and then click OK. #ifdef USE_OSPL_IMPLEMENTATION
MyTopicStructDataReader* myTopicStructDataReader = dynamic_cast<MyTopicStructDataReader*>(reader);
if (myTopicStructDataReader != NULL)
{
DDS::SampleInfoSeq info;
DDS::ReturnCode_t retcode;
MyTopicStructSeq_var myTopicStruct = new MyTopicStructSeq;
for(;;)
{
//MyTopicStruct_initialize(&myTopicStruct);
//retcode = myTopicStructDataReader->take_next_sample(myTopicStruct, info);
retcode = myTopicStructDataReader->take(myTopicStruct, info, 1, DDS::ANY_SAMPLE_STATE, DDS::ANY_VIEW_STATE, DDS::ANY_INSTANCE_STATE);
if (retcode == DDS::RETCODE_NO_DATA)
{
break;
}
else if (retcode != DDS::RETCODE_OK)
{
printf("take_next_sample returned error %d\n", retcode);
return;
}
if (info[0].valid_data)
{
printf("myKeyAttribute: %ld, myLongAttribute: %ld, myBooleanAttribute: %d, myDoubleAttribute: %.3f, myStringAttribute: %s, myLongSequence: {%ld, %ld, %ld}\n", myTopicStruct[0].myKeyAttribute, myTopicStruct[0].myLongAttribute, myTopicStruct[0].myBooleanAttribute, myTopicStruct[0].myDoubleAttribute, myTopicStruct[0].myStringAttribute.m_ptr, myTopicStruct[0].myLongSequenceAttribute[0], myTopicStruct[0].myLongSequenceAttribute[1], myTopicStruct[0].myLongSequenceAttribute[2]);
break;
}
}
}
#else //RTI
MyTopicStructDataReader* myTopicStructDataReader = dynamic_cast<MyTopicStructDataReader*>(reader);
if (myTopicStructDataReader != NULL)
{
DDS::SampleInfo info;
DDS::ReturnCode_t retcode;
MyTopicStruct myTopicStruct;
for(;;)
{
MyTopicStruct_initialize(&myTopicStruct);
retcode = myTopicStructDataReader->take_next_sample(myTopicStruct, info);
if (retcode == DDS::RETCODE_NO_DATA)
{
break;
}
else if (retcode != DDS::RETCODE_OK)
{
printf("take_next_sample returned error %d\n", retcode);
return;
}
if (info.valid_data)
{
//Copy the sequence elements to a local array.
signed int ar[3];
myTopicStruct.myLongSequenceAttribute.to_array(ar, 3);
printf("myKeyAttribute: %ld, myLongAttribute: %ld, myBooleanAttribute: %d, myDoubleAttribute: %.3f, myStringAttribute: %s, myLongSequence: {%ld, %ld, %ld}\n", myTopicStruct.myKeyAttribute, myTopicStruct.myLongAttribute, myTopicStruct.myBooleanAttribute, myTopicStruct.myDoubleAttribute, myTopicStruct.myStringAttribute, ar[0], ar[1], ar[2]);
}
MyTopicStruct_finalize(&myTopicStruct);
}
}
#endif
Run MyPublishingApplication. The output for MySubscribingApplication is
as follows. Note: To fit in this tutorial topic, the following
sample output is formatted differently than how it displays when you
do this lesson. The sample output has been formatted by inserting
line breaks so that you can see the output for each line. These line
breaks do not appear in your output when you do this tutorial. Each
line begins with myKeyAttribute and ends with myLongSequence
ready to receive data
myKeyAttribute: 1, myLongAttribute: 1, myBooleanAttribute: 1,
myDoubleAttribute: 1.000, myStringAttribute: message number 1,
myLongSequence: {1, 2, 3}
myKeyAttribute: 2, myLongAttribute: 2, myBooleanAttribute: 0,
myDoubleAttribute: 0.500, myStringAttribute: message number 2,
myLongSequence: {2, 3, 4}
myKeyAttribute: 3, myLongAttribute: 3, myBooleanAttribute: 1,
myDoubleAttribute: 0.333, myStringAttribute: message number 3,
myLongSequence: {3, 4, 5}
myKeyAttribute: 4, myLongAttribute: 4, myBooleanAttribute: 0,
myDoubleAttribute: 0.250, myStringAttribute: message number 4,
myLongSequence: {4, 5, 6}
myKeyAttribute: 5, myLongAttribute: 5, myBooleanAttribute: 1,
myDoubleAttribute: 0.200, myStringAttribute: message number 5,
myLongSequence: {5, 6, 7}
myKeyAttribute: 6, myLongAttribute: 6, myBooleanAttribute: 0,
myDoubleAttribute: 0.167, myStringAttribute: message number 6,
myLongSequence: {6, 7, 8}
myKeyAttribute: 7, myLongAttribute: 7, myBooleanAttribute: 1,
myDoubleAttribute: 0.143, myStringAttribute: message number 7,
myLongSequence: {7, 8, 9}
myKeyAttribute: 8, myLongAttribute: 8, myBooleanAttribute: 0,
myDoubleAttribute: 0.125, myStringAttribute: message number 8,
myLongSequence: {8, 9, 10}
myKeyAttribute: 9, myLongAttribute: 9, myBooleanAttribute: 1,
myDoubleAttribute: 0.111, myStringAttribute: message number 9,
myLongSequence: {9, 10, 11}
myKeyAttribute: 10, myLongAttribute: 10, myBooleanAttribute: 0,
myDoubleAttribute: 0.100, myStringAttribute: message number 10,
myLongSequence: {10, 11, 12}