#include #include #include "ndds/ndds_c.h" int main(int argc, char *argv[]) { struct DDS_SampleInfo info; DDS_ExceptionCode_t ex; DDS_DomainParticipantFactory* factory = DDS_DomainParticipantFactory_get_instance(); DDS_DomainParticipant* participant = DDS_DomainParticipantFactory_create_participant(factory, 0, &DDS_PARTICIPANT_QOS_DEFAULT, NULL, DDS_STATUS_MASK_NONE ); sleep(10); DDS_PublicationBuiltinTopicDataDataReader* publicationsDR = DDS_PublicationBuiltinTopicDataDataReader_narrow( DDS_Subscriber_lookup_datareader(DDS_DomainParticipant_get_builtin_subscriber(participant), "DCPSPublication")); DDS_SubscriptionBuiltinTopicDataDataReader* subscriptionsDR = DDS_SubscriptionBuiltinTopicDataDataReader_narrow( DDS_Subscriber_lookup_datareader(DDS_DomainParticipant_get_builtin_subscriber(participant), "DCPSSubscription")); DDS_PublicationBuiltinTopicData publicationData; DDS_PublicationBuiltinTopicData_initialize(&publicationData); DDS_SubscriptionBuiltinTopicData subscriptionData; DDS_SubscriptionBuiltinTopicData_initialize(&subscriptionData); DDS_WaitSet* waitSet = DDS_WaitSet_new(); DDS_WaitSet_attach_condition(waitSet,DDS_Entity_get_statuscondition(publicationsDR)); DDS_StatusCondition_set_enabled_statuses(DDS_Entity_get_statuscondition(publicationsDR), DDS_DATA_AVAILABLE_STATUS); DDS_WaitSet_attach_condition(waitSet,DDS_Entity_get_statuscondition(subscriptionsDR)); DDS_StatusCondition_set_enabled_statuses(DDS_Entity_get_statuscondition(subscriptionsDR), DDS_DATA_AVAILABLE_STATUS); struct DDS_ConditionSeq conditionSeq; for (;;) { while (DDS_PublicationBuiltinTopicDataDataReader_take_next_sample(publicationsDR, &publicationData, &info) == DDS_RETCODE_OK) { if (info.view_state == DDS_NEW_VIEW_STATE && info.valid_data) { printf("DataWriter (New) name: \"%s\" topic: \"%s\" type: \"%s\" @%u\n", publicationData.publication_name.name, publicationData.topic_name, publicationData.type_name, (int) publicationData.type_code); DDS_TypeCode_print_IDL(publicationData.type_code, 1, &ex); } } while (DDS_SubscriptionBuiltinTopicDataDataReader_take_next_sample(subscriptionsDR, &subscriptionData, &info) == DDS_RETCODE_OK) { if (info.view_state == DDS_NEW_VIEW_STATE && info.valid_data) { printf("DataReader (New) name: \"%s\" topic: \"%s\" type: \"%s\" @%u\n", subscriptionData.subscription_name.name, subscriptionData.topic_name, subscriptionData.type_name, (int) subscriptionData.type_code); DDS_TypeCode_print_IDL(subscriptionData.type_code, 1, &ex); } } printf("=========================================\n"); DDS_WaitSet_wait(waitSet, &conditionSeq, &DDS_DURATION_INFINITE); } }