int run_test(int argc, ACE_TCHAR* argv[]) { DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DomainParticipant_var dp = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); Publisher_var pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); DomainParticipant_var dp2 = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); Subscriber_var sub = dp2->create_subscriber(SUBSCRIBER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); TransportRegistry& treg = *TheTransportRegistry; if (!treg.get_config("t1").is_nil()) { treg.bind_config("t1", pub); treg.bind_config("t2", sub); } const bool passed = run_multitopic_test(pub, sub); dp->delete_contained_entities(); dpf->delete_participant(dp); dp2->delete_contained_entities(); dpf->delete_participant(dp2); return passed ? 0 : 1; }
int run_test(int argc, ACE_TCHAR *argv[]) { DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DomainParticipant_var dp = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); MessageTypeSupport_var ts = new MessageTypeSupportImpl; ts->register_type(dp, ""); Publisher_var pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); TransportImpl_rch pub_tport = TheTransportFactory->create_transport_impl(1, AUTO_CONFIG); PublisherImpl* pub_impl = dynamic_cast<PublisherImpl*>(pub.in()); pub_impl->attach_transport(pub_tport.in()); Subscriber_var sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); TransportImpl_rch sub_tport = TheTransportFactory->create_transport_impl(2, AUTO_CONFIG); SubscriberImpl* sub_impl = dynamic_cast<SubscriberImpl*>(sub.in()); sub_impl->attach_transport(sub_tport.in()); bool passed = run_sorting_test(dp, ts, pub, sub); passed &= run_filtering_test(dp, ts, pub, sub); dp->delete_contained_entities(); dpf->delete_participant(dp); return passed ? 0 : 1; }
DataWriter_var create_data_writer(const DomainParticipant_var& dp2) { TypeSupport_var ts = new TestMsgTypeSupportImpl; if (ts->register_type(dp2, "") != RETCODE_OK) { ACE_DEBUG((LM_ERROR, "ERROR: %P failed to register type support\n")); return 0; } TopicQos topic_qos; dp2->get_default_topic_qos(topic_qos); set_qos(topic_qos.topic_data.value, TestConfig::TOPIC_DATA()); CORBA::String_var type_name = ts->get_type_name(); Topic_var topic = dp2->create_topic("Movie Discussion List", type_name, topic_qos, 0, DEFAULT_STATUS_MASK); if (!topic) { ACE_DEBUG((LM_ERROR, "ERROR: %P failed to create topic\n")); return 0; } Publisher_var pub = dp2->create_publisher(PUBLISHER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); if (!pub) { ACE_DEBUG((LM_ERROR, "ERROR: %P failed to create publisher\n")); return 0; } DataWriterQos dw_qos; pub->get_default_datawriter_qos(dw_qos); set_qos(dw_qos.user_data.value, TestConfig::DATA_WRITER_USER_DATA()); DataWriter_var dw = pub->create_datawriter(topic, dw_qos, 0, DEFAULT_STATUS_MASK); if (!dw) { ACE_DEBUG((LM_ERROR, "ERROR: %P failed to create data writer\n")); return 0; } return dw; }
int run_test(int argc, ACE_TCHAR *argv[]) { using namespace DDS; using namespace OpenDDS::DCPS; WaitSet_var ws = new WaitSet; DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DomainParticipant_var dp = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); Messenger::MessageTypeSupport_var ts = new Messenger::MessageTypeSupportImpl; ts->register_type(dp, ts->get_type_name()); Topic_var topic = dp->create_topic("MyTopic", ts->get_type_name(), TOPIC_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); Publisher_var pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); TransportImpl_rch pub_tport = TheTransportFactory->create_transport_impl(1, AUTO_CONFIG); PublisherImpl* pub_impl = dynamic_cast<PublisherImpl*> (pub.in()); pub_impl->attach_transport(pub_tport.in()); DataWriter_var dw = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); StatusCondition_var cond = dw->get_statuscondition(); cond->set_enabled_statuses(OFFERED_INCOMPATIBLE_QOS_STATUS); ws->attach_condition(cond); Subscriber_var sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); TransportImpl_rch sub_tport = TheTransportFactory->create_transport_impl(2, AUTO_CONFIG); SubscriberImpl* sub_impl = dynamic_cast<SubscriberImpl*> (sub.in()); sub_impl->attach_transport(sub_tport.in()); DataReaderQos dr_qos; sub->get_default_datareader_qos(dr_qos); dr_qos.durability.kind = PERSISTENT_DURABILITY_QOS; Waiter w(ws); w.activate(); DataReader_var dr = sub->create_datareader(topic, dr_qos, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); w.wait(); bool passed = (w.result() == RETCODE_OK); ws->detach_condition(cond); dp->delete_contained_entities(); dpf->delete_participant(dp); return passed ? 0 : 1; }
int run_test(int argc, ACE_TCHAR *argv[]) { DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DomainParticipant_var dp = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); MessageTypeSupport_var ts = new MessageTypeSupportImpl; ts->register_type(dp, ""); Publisher_var pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); Subscriber_var sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, 0, DEFAULT_STATUS_MASK); bool passed = run_sorting_test(dp, ts, pub, sub); passed &= run_filtering_test(dp, ts, pub, sub); passed &= run_change_parameter_test(dp, ts, pub, sub); dp->delete_contained_entities(); dpf->delete_participant(dp); return passed ? 0 : 1; }
int run_test(int argc, ACE_TCHAR *argv[]) { using namespace DDS; using namespace OpenDDS::DCPS; using namespace Messenger; WaitSet_var ws = new WaitSet; DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DomainParticipant_var dp = dpf->create_participant(23, PARTICIPANT_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); MessageTypeSupport_var ts = new MessageTypeSupportImpl; // leave type name not speficied would register it with _interface_repository_id ts->register_type(dp, ""); CORBA::String_var type_name = ts->get_type_name(); Topic_var topic = dp->create_topic("MyTopic", type_name, TOPIC_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); Publisher_var pub = dp->create_publisher(PUBLISHER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); DataWriter_var dw = pub->create_datawriter(topic, DATAWRITER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); Subscriber_var sub = dp->create_subscriber(SUBSCRIBER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); DataReader_var dr = sub->create_datareader(topic, DATAREADER_QOS_DEFAULT, 0, ::OpenDDS::DCPS::DEFAULT_STATUS_MASK); StatusCondition_var dw_sc = dw->get_statuscondition(); dw_sc->set_enabled_statuses(PUBLICATION_MATCHED_STATUS); ws->attach_condition(dw_sc); Duration_t infinite = {DURATION_INFINITE_SEC, DURATION_INFINITE_NSEC}; ConditionSeq active; ws->wait(active, infinite); ws->detach_condition(dw_sc); ReturnCode_t ret = RETCODE_OK; MessageDataWriter_var mdw = MessageDataWriter::_narrow(dw); Message msg = {0}; for (int i(0); i < 12; ++i) { ++msg.subject_id; ret = mdw->write(msg, HANDLE_NIL); if (ret != RETCODE_OK) return ret; } ReadCondition_var dr_rc = dr->create_readcondition(NOT_READ_SAMPLE_STATE, NEW_VIEW_STATE, ALIVE_INSTANCE_STATE); ReadCondition_var dr_rc2 = dr->create_readcondition(ANY_SAMPLE_STATE, ANY_VIEW_STATE, NOT_ALIVE_DISPOSED_INSTANCE_STATE); ws->attach_condition(dr_rc); ws->attach_condition(dr_rc2); MessageDataReader_var mdr = MessageDataReader::_narrow(dr); bool passed = true, done = false; while (!done) { ret = ws->wait(active, infinite); if (ret != RETCODE_OK) { passed = false; break; } cout << "wait returned" << endl; for (CORBA::ULong i(0); i < active.length(); ++i) { if (active[i] == dr_rc) { // To test both take_w_condition and // take_next_instance_w_condition, we'll limit the "take" to 3 // samples and then use take_next_instance_w_condition. MessageSeq data; SampleInfoSeq info; ret = mdr->take_w_condition(data, info, 3, dr_rc); if (ret != RETCODE_OK && ret != RETCODE_NO_DATA) { cout << "ERROR: take_w_condition returned " << ret << endl; passed = false; done = true; } if (ret == RETCODE_OK) { received_data(data, mdw, msg); } cout << "testing take_next_instance_w_condition" << endl; InstanceHandle_t handle = HANDLE_NIL; while (true) { ret = mdr->take_next_instance_w_condition(data, info, 1, handle, dr_rc); if (ret == RETCODE_NO_DATA) break; if (ret != RETCODE_OK) { cout << "ERROR: take_next_instance_w_condition returned " << ret << endl; passed = false; done = true; } received_data(data, mdw, msg); handle = info[info.length() - 1].instance_handle; } } else if (active[i] == dr_rc2) { cout << "an instance has been disposed, exiting" << endl; done = true; } } } ws->detach_condition(dr_rc); dr->delete_readcondition(dr_rc); ws->detach_condition(dr_rc2); // Instead of: dr->delete_readcondition(dr_rc2); dr->delete_contained_entities(); dp->delete_contained_entities(); dpf->delete_participant(dp); return passed ? 0 : 1; }
int OSPL_MAIN ( int argc, char *argv[]) { /* Generic DDS entities */ DomainParticipantFactory_var dpf; DomainParticipant_var participant; Topic_var chatMessageTopic; Publisher_var chatPublisher; DataWriter_ptr parentWriter; /* QosPolicy holders */ TopicQos reliable_topic_qos; PublisherQos pub_qos; DataWriterQos dw_qos; /* DDS Identifiers */ DomainId_t domain = 0; InstanceHandle_t userHandle; ReturnCode_t status; /* Type-specific DDS entities */ ChatMessageTypeSupport_var chatMessageTS; ChatMessageDataWriter_var talker; /* Sample definitions */ ChatMessage *msg; /* Example on Heap */ /* Others */ int ownID = 1; int i; const char *partitionName = "ChatRoom1"; char *chatMessageTypeName = NULL; char buf[MAX_MSG_LEN]; #ifdef INTEGRITY #ifdef CHATTER_QUIT ownID = -1; #else ownID = 1; #endif #else /* Options: Chatter [ownID] */ if (argc > 1) { ownID = atoi(argv[1]); } #endif /* Create a DomainParticipantFactory and a DomainParticipant (using Default QoS settings. */ dpf = DomainParticipantFactory::get_instance (); checkHandle(dpf.in(), "DDS::DomainParticipantFactory::get_instance"); participant = dpf->create_participant(domain, PARTICIPANT_QOS_DEFAULT, NULL, STATUS_MASK_NONE); checkHandle(participant.in(), "DDS::DomainParticipantFactory::create_participant"); /* Register the required datatype for ChatMessage. */ chatMessageTS = new ChatMessageTypeSupport(); checkHandle(chatMessageTS.in(), "new ChatMessageTypeSupport"); chatMessageTypeName = chatMessageTS->get_type_name(); status = chatMessageTS->register_type( participant.in(), chatMessageTypeName); checkStatus(status, "NetworkPartitionsData::ChatMessageTypeSupport::register_type"); /* Set the ReliabilityQosPolicy to RELIABLE. */ status = participant->get_default_topic_qos(reliable_topic_qos); checkStatus(status, "DDS::DomainParticipant::get_default_topic_qos"); reliable_topic_qos.reliability.kind = RELIABLE_RELIABILITY_QOS; /* Make the tailored QoS the new default. */ status = participant->set_default_topic_qos(reliable_topic_qos); checkStatus(status, "DDS::DomainParticipant::set_default_topic_qos"); /* Use the changed policy when defining the ChatMessage topic */ chatMessageTopic = participant->create_topic( "Chat_ChatMessage", chatMessageTypeName, reliable_topic_qos, NULL, STATUS_MASK_NONE); checkHandle(chatMessageTopic.in(), "DDS::DomainParticipant::create_topic (ChatMessage)"); /* Adapt the default PublisherQos to write into the "ChatRoom1" Partition. */ status = participant->get_default_publisher_qos (pub_qos); checkStatus(status, "DDS::DomainParticipant::get_default_publisher_qos"); pub_qos.partition.name.length(1); pub_qos.partition.name[0] = partitionName; /* Create a Publisher for the chatter application. */ chatPublisher = participant->create_publisher(pub_qos, NULL, STATUS_MASK_NONE); checkHandle(chatPublisher.in(), "DDS::DomainParticipant::create_publisher"); /* Create a DataWriter for the ChatMessage Topic (using the appropriate QoS). */ parentWriter = chatPublisher->create_datawriter( chatMessageTopic.in(), DATAWRITER_QOS_USE_TOPIC_QOS, NULL, STATUS_MASK_NONE); checkHandle(parentWriter, "DDS::Publisher::create_datawriter (chatMessage)"); /* Narrow the abstract parent into its typed representative. */ talker = ChatMessageDataWriter::_narrow(parentWriter); checkHandle(talker.in(), "NetworkPartitionsData::ChatMessageDataWriter::_narrow"); /* Initialize the chat messages on Heap. */ msg = new ChatMessage(); checkHandle(msg, "new ChatMessage"); msg->userID = ownID; msg->index = 0; if (ownID == TERMINATION_MESSAGE) { snprintf(buf, MAX_MSG_LEN, "Termination message."); } else { snprintf(buf, MAX_MSG_LEN, "Hi there, I will send you %d more messages.", NUM_MSG); } msg->content = string_dup(buf); cout << "Writing message: \"" << msg->content << "\"" << endl; /* Register a chat message for this user (pre-allocating resources for it!!) */ userHandle = talker->register_instance(*msg); /* Write a message using the pre-generated instance handle. */ status = talker->write(*msg, userHandle); checkStatus(status, "NetworkPartitionsData::ChatMessageDataWriter::write"); sleep (1); /* do not run so fast! */ /* Write any number of messages, re-using the existing string-buffer: no leak!!. */ for (i = 1; i <= NUM_MSG && ownID != TERMINATION_MESSAGE; i++) { msg->index = i; snprintf(buf, MAX_MSG_LEN, "Message no. %d", i); msg->content = string_dup(buf); cout << "Writing message: \"" << msg->content << "\"" << endl; status = talker->write(*msg, userHandle); checkStatus(status, "NetworkPartitionsData::ChatMessageDataWriter::write"); sleep (1); /* do not run so fast! */ } /* Leave the room by disposing and unregistering the message instance. */ status = talker->dispose(*msg, userHandle); checkStatus(status, "NetworkPartitionsData::ChatMessageDataWriter::dispose"); status = talker->unregister_instance(*msg, userHandle); checkStatus(status, "NetworkPartitionsData::ChatMessageDataWriter::unregister_instance"); /* Release the data-samples. */ delete msg; // msg allocated on heap: explicit de-allocation required!! /* Remove the DataWriters */ status = chatPublisher->delete_datawriter( talker.in() ); checkStatus(status, "DDS::Publisher::delete_datawriter (talker)"); /* Remove the Publisher. */ status = participant->delete_publisher( chatPublisher.in() ); checkStatus(status, "DDS::DomainParticipant::delete_publisher"); status = participant->delete_topic( chatMessageTopic.in() ); checkStatus(status, "DDS::DomainParticipant::delete_topic (chatMessageTopic)"); /* Remove the type-names. */ string_free(chatMessageTypeName); /* Remove the DomainParticipant. */ status = dpf->delete_participant( participant.in() ); checkStatus(status, "DDS::DomainParticipantFactory::delete_participant"); cout << "Completed Chatter example" << endl; return 0; }