int main(int argc, char *argv[]) { os_time delay_2ms = { 0, 2000000 }; DDSEntityManager *mgr = new DDSEntityManager(); // create domain participant char partition_name[] = "Listener example"; mgr->createParticipant(partition_name); //create type MsgTypeSupport_var mt = new MsgTypeSupport(); mgr->registerType(mt.in()); //create Topic char topic_name[] = "ListenerData_Msg"; mgr->createTopic(topic_name); //create Publisher mgr->createPublisher(); // create DataWriter mgr->createWriter(); // Publish Events DataWriter_ptr dwriter = mgr->getWriter(); MsgDataWriter_var listenerWriter = MsgDataWriter::_narrow(dwriter); Msg msgInstance; /* Example on Stack */ msgInstance.userID = 1; msgInstance.message = CORBA::string_dup("Hello World"); cout << "=== [ListenerDataPublisher] writing a message containing :" << endl; cout << " userID : " << msgInstance.userID << endl; cout << " Message : \"" << msgInstance.message << "\"" << endl; ReturnCode_t status = listenerWriter->write(msgInstance, NULL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_2ms); /* Remove the DataWriters */ mgr->deleteWriter(listenerWriter.in ()); /* Remove the Publisher. */ mgr->deletePublisher(); /* Remove the Topics. */ mgr->deleteTopic(); /* Remove Participant. */ mgr->deleteParticipant(); delete mgr; return 0; }
int OSPL_MAIN (int argc, char *argv[]) { bool automatic = true; ReturnCode_t status = - 1; os_time delay = { 20, 0 }; os_time delay_1s = { 1, 0 }; char buf[MAX_MSG_LEN]; if (argc < 4) { usage(); } if ((strcmp(argv[1], "transient") && strcmp(argv[1], "persistent")) || (strcmp(argv[2], "false") && strcmp(argv[2], "true"))) { usage(); } string durability_kind(argv[1]); bool autodispose_unregistered_instances = (strcmp(argv[2], "true") == 0); DDSEntityManager mgr (durability_kind, autodispose_unregistered_instances); automatic = (strcmp(argv[3], "true") == 0); // Wait for the Subscriber (case of transient = true && auto_dispose = true) os_nanoSleep(delay_1s); // create domain participant char partition_name[] = "Durability example"; mgr.createParticipant(partition_name); //create type MsgTypeSupport_var mt = new MsgTypeSupport(); mgr.registerType(mt.in()); //create Topic char topic_name[] = "DurabilityData_Msg"; mgr.createTopic(topic_name); //create Publisher mgr.createPublisher(); // create DataWriter mgr.createWriter(); // Publish Events DataWriter_var dwriter = mgr.getWriter(); MsgDataWriter_var DurabilityDataWriter = MsgDataWriter::_narrow(dwriter.in()); Msg *instances[10]; InstanceHandle_t userHandle[10]; for (int x = 0; x < 10; x++) { instances[x] = new Msg(); instances[x]->id = x; snprintf(buf, MAX_MSG_LEN, "%d", x); userHandle[x] = DurabilityDataWriter->register_instance(*instances[x]); instances[x]->content = DDS::string_dup(buf); cout << instances[x]->content << endl; DurabilityDataWriter->write(*instances[x], userHandle[x]); } if (! automatic) { char c = 0; cout << "Enter E to exit" << endl; while (c != 'E') { cin >> c; } }
int main(int argc, char *argv[]) { os_time delay_200ms = { 0, 200000000 }; os_time delay_500ms = { 0, 500000000 }; cout << "argc=" << argc << endl; if (argc < 3) { usage(); } if ((strcmp(argv[1], "false") != 0) && (strcmp(argv[1], "true") != 0) && (strcmp(argv[2], "dispose") != 0) && (strcmp(argv[2], "unregister") != 0) && (strcmp(argv[2], "stoppub") != 0)) { usage(); } bool autodispose_unregistered_instances = (strcmp(argv[1], "true") == 0); // create domain participant char partition_name[] = "Lifecycle example"; //------------------ Msg topic --------------------// DDSEntityManager *mgr = new DDSEntityManager (autodispose_unregistered_instances); // create domain participant mgr->createParticipant(partition_name); //create type MsgTypeSupport_var mt = new MsgTypeSupport(); mgr->registerType(mt.in()); //create Topic char topic_name[] = "Lifecycle_Msg"; mgr->createTopic(topic_name); //create Publisher mgr->createPublisher(); // create DataWriters mgr->createWriters(); DataWriter_ptr dwriter = mgr->getWriter(); MsgDataWriter_var LifecycleWriter = MsgDataWriter::_narrow(dwriter); DataWriter_ptr dwriter_stopper = mgr->getWriter_stopper(); MsgDataWriter_var LifecycleWriter_stopper = MsgDataWriter::_narrow(dwriter_stopper); os_nanoSleep(delay_500ms); ReturnCode_t status; if (strcmp(argv[2], "dispose") == 0) { Msg *msgInstance = new Msg(); msgInstance->userID = 1; msgInstance->message = CORBA::string_dup("Lifecycle_1"); msgInstance->writerStates = CORBA::string_dup("SAMPLE_SENT -> INSTANCE_DISPOSED -> DATAWRITER_DELETED"); cout << "=== [Publisher] :" << endl; cout << " userID : " << msgInstance->userID << endl; cout << " Message : \"" << msgInstance->message << "\"" << endl; cout << " writerStates : \"" << msgInstance->writerStates << "\"" << endl; status = LifecycleWriter->write(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_500ms); // cout << "=== [Publisher] : SAMPLE_SENT" << endl; // Dispose instance status = LifecycleWriter->dispose(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::dispose"); cout << "=== [Publisher] : INSTANCE_DISPOSED" << endl; /* Release the data-samples. */ delete msgInstance; // msg allocated on heap: explicit de-allocation required!! } else if (strcmp(argv[2], "unregister") == 0) { Msg *msgInstance = new Msg(); msgInstance->userID = 2; msgInstance->message = CORBA::string_dup("Lifecycle_2"); msgInstance->writerStates = CORBA::string_dup("SAMPLE_SENT -> INSTANCE_UNREGISTERED -> DATAWRITER_DELETED"); cout << "=== [Publisher] :" << endl; cout << " userID : " << msgInstance->userID << endl; cout << " Message : \"" << msgInstance->message << "\"" << endl; cout << " writerStates : \"" << msgInstance->writerStates << "\"" << endl; status = LifecycleWriter->write(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_500ms); // cout << "=== [Publisher] : SAMPLE_SENT" << endl; // Unregister instance : the auto_dispose_unregistered_instances flag // is currently ignored and the instance is never disposed automatically status = LifecycleWriter->unregister_instance(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::unregister_instance"); cout << "=== [Publisher] : INSTANCE_UNREGISTERED" << endl; /* Release the data-samples. */ delete msgInstance; // msg allocated on heap: explicit de-allocation required!! } else if (strcmp(argv[2], "stoppub") == 0) { Msg *msgInstance = new Msg(); msgInstance->userID = 3; msgInstance->message = CORBA::string_dup("Lifecycle_3"); msgInstance->writerStates = CORBA::string_dup("SAMPLE_SENT -> DATAWRITER_DELETED"); cout << "=== [Publisher] :" << endl; cout << " userID : " << msgInstance->userID << endl; cout << " Message : \"" << msgInstance->message << "\"" << endl; cout << " writerStates : \"" << msgInstance->writerStates << "\"" << endl; status = LifecycleWriter->write(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_500ms); // cout << "=== [Publisher] : SAMPLE_SENT" << endl; /* Release the data-samples. */ delete msgInstance; // msg allocated on heap: explicit de-allocation required!! } // let the subscriber treat the previous writer state !!!! cout << "=== [Publisher] waiting 500ms to let the subscriber treat the previous write state ..." << endl; os_nanoSleep(delay_500ms); /* Remove the DataWriters */ mgr->deleteWriter(LifecycleWriter.in ()); os_nanoSleep(delay_500ms); cout << "=== [Publisher] : DATAWRITER_DELETED" << endl; // Stop the subscriber Msg *msgInstance = new Msg(); msgInstance->userID = 4; msgInstance->message = CORBA::string_dup("Lifecycle_4"); msgInstance->writerStates = CORBA::string_dup("STOPPING_SUBSCRIBER"); cout << "=== [Publisher] :" << endl; cout << " userID : " << msgInstance->userID << endl; cout << " Message : \"" << msgInstance->message << "\"" << endl; cout << " writerStates : \"" << msgInstance->writerStates << "\"" << endl; status = LifecycleWriter_stopper->write(*msgInstance, NULL); checkStatus(status, "MsgDataWriter::write"); os_nanoSleep(delay_500ms); // //cout << "=== [Publisher] : SAMPLE_SENT" << endl; /* Release the data-samples. */ delete msgInstance; // msg allocated on heap: explicit de-allocation required!! /* Remove the DataWriter_stopper */ mgr->deleteWriter(LifecycleWriter_stopper.in ()); /* Remove the Publisher. */ mgr->deletePublisher(); /* Remove the Topics. */ mgr->deleteTopic(); mgr->deleteParticipant(); delete mgr; return 0; }
int main(int argc, char *argv[]) { os_time delay_500ms = { 0, 500000000 }; DDSEntityManager *mgr = new DDSEntityManager(); // create domain participant // create domain participant char partition_name[] = "WaitSet example"; mgr->createParticipant(partition_name); //create type MsgTypeSupport_var mt = new MsgTypeSupport(); mgr->registerType(mt.in()); //create Topic char topic_name[] = "WaitSetData_Msg"; mgr->createTopic(topic_name); //create Publisher mgr->createPublisher(); // create DataWriter mgr->createWriter(); // Publish Events DataWriter_ptr dwriter = mgr->getWriter(); MsgDataWriter_var WaitSetDataWriter = MsgDataWriter::_narrow(dwriter); Msg msgInstance; /* Example on Stack */ msgInstance.userID = 1; msgInstance.message = CORBA::string_dup("First Hello"); cout << "=== [Publisher] writing a message containing :" << endl; cout << " userID : " << msgInstance.userID << endl; cout << " Message : \"" << msgInstance.message << "\"" << endl; ReturnCode_t status = WaitSetDataWriter->write(msgInstance, DDS::HANDLE_NIL); checkStatus(status, "MsgDataWriter::write1"); os_nanoSleep(delay_500ms); // Write a second message msgInstance.message = CORBA::string_dup("Hello again"); status = WaitSetDataWriter->write(msgInstance, DDS::HANDLE_NIL); checkStatus(status, "MsgDataWriter::write2"); cout << endl << "=== [Publisher] writing a message containing :" << endl; cout << " userID : " << msgInstance.userID << endl; cout << " Message : \"" << msgInstance.message << "\"" << endl; os_nanoSleep(delay_500ms); // clean up status = WaitSetDataWriter->dispose(msgInstance, DDS::HANDLE_NIL); checkStatus(status, "MsgDataWriter::dispose"); status = WaitSetDataWriter->unregister_instance(msgInstance, DDS::HANDLE_NIL); checkStatus(status, "MsgDataWriter::unregister_instance"); /* Remove the DataWriters */ mgr->deleteWriter(WaitSetDataWriter.in ()); /* Remove the Publisher. */ mgr->deletePublisher(); /* Remove the Topics. */ mgr->deleteTopic(); /* Remove Participant. */ mgr->deleteParticipant(); delete mgr; return 0; }