/* HelloWorld_publisher.cs A publication of data of type HelloWorld This file is derived from code automatically generated by the rtiddsgen command: rtiddsgen -language C# -example <arch> HelloWorld.idl Example publication of type HelloWorld automatically generated by 'rtiddsgen'. To test them follow these steps: (1) Compile this file and the example subscription. (2) Start the subscription on the same domain used for RTI Data Distribution with the command objs<arch>\HelloWorld_subscriber <domain_id> <sample_count> (3) Start the publication on the same domain used for RTI Data Distribution with the command objs<arch>\HelloWorld_publisher <domain_id> <sample_count> (4) [Optional] Specify the list of discovery initial peers and multicast receive addresses via an environment variable or a file (in the current working directory) called NDDS_DISCOVERY_PEERS. You can run any number of publishers and subscribers programs, and can add and remove them dynamically from the domain. Example: To run the example application on domain <domain_id>: bin<Debug|Release>\HelloWorld_publisher <domain_id> <sample_count> bin<Debug|Release>\HelloWorld_subscriber <domain_id> <sample_count> modification history ------------ ------- */ using System; using System.Collections.Generic; using System.Text; public class HelloWorldPublisher { public static void Main(string[] args) { // --- Get domain ID --- // int domain_id = 0; if (args.Length >= 1) { domain_id = Int32.Parse(args[0]); } // --- Get max loop count; 0 means infinite loop --- // int sample_count = 0; if (args.Length >= 2) { sample_count = Int32.Parse(args[1]); } /* Uncomment this to turn on additional logging NDDS.ConfigLogger.get_instance().set_verbosity_by_category( NDDS.LogCategory.CONFIG_LOG_CATEGORY_API, NDDS.LogVerbosity.CONFIG_LOG_VERBOSITY_STATUS_ALL); */ // --- Run --- // try { HelloWorldPublisher.publish( domain_id, sample_count); } catch(DDS.Exception) { Console.WriteLine("error in publisher"); } } static void publish(int domain_id, int sample_count) { // --- Create participant --- // /* To customize participant QoS, use DDS.DomainParticipantFactory.get_instance(). get_default_participant_qos() */ DDS.DomainParticipant participant = DDS.DomainParticipantFactory.get_instance().create_participant( domain_id, DDS.DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (participant == null) { shutdown(participant); throw new ApplicationException("create_participant error"); } // --- Create publisher --- // /* To customize publisher QoS, use participant.get_default_publisher_qos() */ DDS.Publisher publisher = participant.create_publisher( DDS.DomainParticipant.PUBLISHER_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (publisher == null) { shutdown(participant); throw new ApplicationException("create_publisher error"); } // --- Create topic --- // /* Register type before creating topic */ System.String type_name = HelloWorldTypeSupport.get_type_name(); try { HelloWorldTypeSupport.register_type( participant, type_name); } catch(DDS.Exception e) { Console.WriteLine("register_type error {0}", e); shutdown(participant); throw e; } /* To customize topic QoS, use participant.get_default_topic_qos() */ DDS.Topic topic = participant.create_topic( "Example HelloWorld", type_name, DDS.DomainParticipant.TOPIC_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (topic == null) { shutdown(participant); throw new ApplicationException("create_topic error"); } // --- Create writer --- // /* To customize data writer QoS, use publisher.get_default_datawriter_qos() */ DDS.DataWriter writer = publisher.create_datawriter( topic, DDS.Publisher.DATAWRITER_QOS_DEFAULT, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (writer == null) { shutdown(participant); throw new ApplicationException("create_datawriter error"); } HelloWorldDataWriter HelloWorld_writer = (HelloWorldDataWriter)writer; // --- Write --- // /* Create data sample for writing */ HelloWorld instance = HelloWorldTypeSupport.create_data(); if (instance == null) { shutdown(participant); throw new ApplicationException( "HelloWorldTypeSupport.create_data error"); } /* For data type that has key, if the same instance is going to be written multiple times, initialize the key here and register the keyed instance prior to writing */ DDS.InstanceHandle_t instance_handle = DDS.InstanceHandle_t.HANDLE_NIL; /* instance_handle = HelloWorld_writer.register_instance(instance); */ /* Main loop */ const System.Int32 send_period = 4000; // milliseconds for (int count=0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine("Writing HelloWorld, count {0}", count); /* Modify the data to be sent here */ instance.msg = "Hello World! (" + count + ")"; try { HelloWorld_writer.write(instance, ref instance_handle); } catch(DDS.Exception e) { Console.WriteLine("write error {0}", e); } System.Threading.Thread.Sleep(send_period); } /* try { HelloWorld_writer.unregister_instance( instance, instance_handle); } catch(DDS.Exception e) { Console.WriteLine("unregister instance error: {0}", e); } */ // --- Shutdown --- // /* Delete data sample */ try { HelloWorldTypeSupport.delete_data(instance); } catch(DDS.Exception e) { Console.WriteLine( "HelloWorldTypeSupport.delete_data error: {0}", e); } /* Delete all entities */ shutdown(participant); } static void shutdown( DDS.DomainParticipant participant) { /* Delete all entities */ if (participant != null) { participant.delete_contained_entities(); DDS.DomainParticipantFactory.get_instance().delete_participant( ref participant); } /* RTI Data Distribution Service provides finalize_instance() method on domain participant factory for people who want to release memory used by the participant factory. Uncomment the following block of code for clean destruction of the singleton. */ /* try { DDS.DomainParticipantFactory.finalize_instance(); } catch (DDS.Exception e) { Console.WriteLine("finalize_instance error: {0}", e); throw e; } */ } }