static void subscribe(int domain_id, int sample_count) { // --- Create participant --- // /* To customize the participant QoS, use * the configuration file USER_QOS_PROFILES.xml */ 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 topic --- // /* Register the type before creating the topic */ System.String type_name = orderedTypeSupport.get_type_name(); try { orderedTypeSupport.register_type( participant, type_name); } catch (DDS.Exception e) { Console.WriteLine("register_type error {0}", e); shutdown(participant); throw e; } /* To customize the topic QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Topic topic = participant.create_topic( "Example ordered", 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"); } /* Start changes for Ordered_Presentation */ /* Create two subscribers to illustrate different presentation QoS * This is a publisher/subscriber level QoS, so we have to * do it here instead of just making two datareaders */ DDS.Subscriber[] subscriber = new DDS.Subscriber[MAX_SUBSCRIBERS]; DDS.DataReader[] reader = new DDS.DataReader[MAX_SUBSCRIBERS]; /* Subscriber[0], reader[0] and ordered_reader[0] is getting * the profile "ordered_Profile_subscriber_instance" */ /* Subscriber[1], reader[1] and ordered_reader[1] is getting * the profile "ordered_Profile_subscriber_topic" */ String[] profile_name = new String[MAX_SUBSCRIBERS] { "ordered_Profile_subscriber_instance", "ordered_Profile_subscriber_topic" }; for (int i = 0; i < MAX_SUBSCRIBERS; ++i) { Console.WriteLine("Subscriber {0} using {1}", i, profile_name[i]); subscriber[i] = participant.create_subscriber_with_profile( "ordered_Library", profile_name[i], null, DDS.StatusMask.STATUS_MASK_NONE); if (subscriber[i] == null) { shutdown(participant); throw new ApplicationException("create_subscriber error"); } reader[i] = subscriber[i].create_datareader_with_profile(topic, "ordered_Library", profile_name[i], null, DDS.StatusMask.STATUS_MASK_ALL); if (reader[i] == null) { shutdown(participant); throw new ApplicationException("create_datareader error"); } } /* If you want to change the Publisher's QoS programmatically rather * than using the XML file, you will need to add the following lines to * your code and comment out the above 'for' loop. */ /* Get default subscriber QoS to customize */ /* DDS.SubscriberQos subscriber_qos = new DDS.SubscriberQos(); * participant.get_default_subscriber_qos(subscriber_qos); * */ /* Set this for both subscribers */ /* subscriber_qos.presentation.ordered_access = true; * */ /* No listener needed, but we do need to increase history depth */ /* Get default datareader QoS to customize */ /* DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); * * for (int i = 0; i < MAX_SUBSCRIBERS; ++i) { * if (i == 0) { * Console.WriteLine("Subscriber 0 using Instance access scope"); * subscriber_qos.presentation.access_scope = * DDS.PresentationQosPolicyAccessScopeKind * .INSTANCE_PRESENTATION_QOS; * } else { * Console.WriteLine("Subscriber 1 using Topic access scope"); * subscriber_qos.presentation.access_scope = * DDS.PresentationQosPolicyAccessScopeKind * .TOPIC_PRESENTATION_QOS; * } * */ /* To create subscriber with default QoS, use * DDS.DomainParticipant.SUBSCRIBER_QOS_DEFAULTinstead of * subscriber_qos */ /* subscriber[i] = participant.create_subscriber( * subscriber_qos, null, DDS.StatusMask.STATUS_MASK_NONE); * if (subscriber == null) { * shutdown(participant); * throw new ApplicationException("create_subscriber error"); * } * subscriber[i].get_default_datareader_qos(datareader_qos); * datareader_qos.history.depth = 10; * */ /* To create datareader with default QoS, use * DDS.Subscriber.DATAREADER_QOS_DEFAULT instead of datareader_qos */ /* reader[i] = subscriber[i].create_datareader( * topic, * datareader_qos, * null, * DDS.StatusMask.STATUS_MASK_NONE); * if (reader[i] == null) { * shutdown(participant); * throw new ApplicationException("create_datareader error"); * } * } * */ // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 4000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "\nSleeping for {0} sec...\n-----", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); poll_data(reader, 2); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); }
static void subscribe(int domain_id, int sample_count, int turbo_mode_on) { System.String profile_name = null; System.String library_name = "batching_Library"; /* We pick the profile name if the turbo_mode is selected or not. * If Turbo_mode is not selected, the batching profile will be used. */ if (turbo_mode_on == 1) { profile_name = "turbo_mode_profile"; Console.WriteLine("Turbo Mode enable"); } else { profile_name = "batch_profile"; Console.WriteLine("Manual batching enable"); } // --- Create participant --- // /* To customize the participant QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DomainParticipant participant = DDS.DomainParticipantFactory.get_instance(). create_participant_with_profile( domain_id, library_name, profile_name, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (participant == null) { shutdown(participant); throw new ApplicationException("create_participant error"); } // --- Create subscriber --- // /* To customize the subscriber QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Subscriber subscriber = participant.create_subscriber_with_profile( library_name, profile_name, null /* listener */, DDS.StatusMask.STATUS_MASK_NONE); if (subscriber == null) { shutdown(participant); throw new ApplicationException("create_subscriber error"); } // --- Create topic --- // /* Register the type before creating the topic */ System.String type_name = batch_dataTypeSupport.get_type_name(); try { batch_dataTypeSupport.register_type( participant, type_name); } catch (DDS.Exception e) { Console.WriteLine("register_type error {0}", e); shutdown(participant); throw e; } /* To customize the topic QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Topic topic = participant.create_topic( "Example batch_data", 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 reader --- // /* Create a data reader listener */ batch_dataListener reader_listener = new batch_dataListener(); /* To customize the data reader QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DataReader reader = subscriber.create_datareader_with_profile( topic, library_name, profile_name, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader == null) { shutdown(participant); reader_listener = null; throw new ApplicationException("create_datareader error"); } // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 4000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "batch_data subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }