// -*- C++ -*- // ============================================================================ /** * @file publisher.cpp * * $Id$ * * */ // ============================================================================ #include "QuoterTypeSupportImpl.h" #include "Writer.h" #include #include #include #include #include #ifdef ACE_AS_STATIC_LIBS #include #include #include #endif #include #include "ace/Get_Opt.h" OpenDDS::DCPS::TransportIdType transport_impl_id = 1; int parse_args (int argc, ACE_TCHAR *argv[]) { ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("t:")); int c; while ((c = get_opts ()) != -1) { switch (c) { case 't': if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("udp")) == 0) { transport_impl_id = 2; } else if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("mcast")) == 0) { transport_impl_id = 3; } else if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("reliable_mcast")) == 0) { transport_impl_id = 4; } // test with DEFAULT_SIMPLE_TCP_ID. else if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("default_tcp")) == 0) { transport_impl_id = OpenDDS::DCPS::DEFAULT_SIMPLE_TCP_ID; } // test with DEFAULT_SIMPLE_UDP_ID. else if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("default_udp")) == 0) { transport_impl_id = OpenDDS::DCPS::DEFAULT_SIMPLE_UDP_ID; } else if (ACE_OS::strcmp (get_opts.opt_arg (), ACE_TEXT("default_mcast_pub")) == 0) { transport_impl_id = OpenDDS::DCPS::DEFAULT_SIMPLE_MCAST_PUB_ID; } break; case '?': default: ACE_ERROR_RETURN ((LM_ERROR, "usage: %s " "-t " "\n", argv [0]), -1); } } // Indicates sucessful parsing of the command line return 0; } int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { try { DDS::DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); // To Do: Create the participant named 'participant'. // End: Create the participant named 'participant'. if (parse_args (argc, argv) == -1) { return -1; } QuoterTypeSupport_var qts = new QuoterTypeSupportImpl(); // To Do: Register the type using 'qts' from above. // End: Register the type using 'qts'. CORBA::String_var type_name = qts->get_type_name (); // To Do: Create the topic named 'topic' using the default topic QoS. // End: Create the topic named 'topic' using the default topic QoS. OpenDDS::DCPS::TransportImpl_rch tcp_impl = TheTransportFactory->create_transport_impl (transport_impl_id, ::OpenDDS::DCPS::AUTO_CONFIG); // To Do: Create the publisher named 'pub' using default QoS. // End: Create the publisher named 'pub'. // Attach the publisher to the transport. OpenDDS::DCPS::PublisherImpl* pub_impl = dynamic_cast (pub.in ()); if (0 == pub_impl) { cerr << "Failed to obtain publisher servant" << endl; exit(1); } OpenDDS::DCPS::AttachStatus status = pub_impl->attach_transport(tcp_impl.in()); if (status != OpenDDS::DCPS::ATTACH_OK) { std::string status_str; switch (status) { case OpenDDS::DCPS::ATTACH_BAD_TRANSPORT: status_str = "ATTACH_BAD_TRANSPORT"; break; case OpenDDS::DCPS::ATTACH_ERROR: status_str = "ATTACH_ERROR"; break; case OpenDDS::DCPS::ATTACH_INCOMPATIBLE_QOS: status_str = "ATTACH_INCOMPATIBLE_QOS"; break; default: status_str = "Unknown Status"; break; } cerr << "Failed to attach to the transport. Status == " << status_str.c_str() << endl; exit(1); } // To Do: Create the datawriter named 'dw' using the default QoS. // End: Create the datawriter named 'dw' using the default QoS. Writer* writer = new Writer(dw.in()); writer->start (); while ( !writer->is_finished()) { ACE_Time_Value small(0,250000); ACE_OS::sleep (small); } // Cleanup writer->end (); delete writer; // To Do: Delete the participant's contained entities when finished // End: Delete the participant's contained entities when finished dpf->delete_participant(participant.in ()); TheTransportFactory->release(); TheServiceParticipant->shutdown (); } catch (CORBA::Exception& e) { cerr << "PUB: Exception caught in main.cpp:" << endl << e << endl; exit(1); } return 0; }