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 subscriber --- // /* To customize the subscriber QoS, use the configuration file USER_QOS_PROFILES.xml */ DDS.Subscriber subscriber = participant.create_subscriber( DDS.DomainParticipant.SUBSCRIBER_QOS_DEFAULT, 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 = tbfTypeSupport.get_type_name(); try { tbfTypeSupport.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 tbf", 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 */ tbfListener reader_listener = new tbfListener(); /* To customize the data reader QoS, use the configuration file USER_QOS_PROFILES.xml */ DDS.DataReader reader = subscriber.create_datareader( topic, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader == null) { shutdown(participant); reader_listener = null; throw new ApplicationException("create_datareader error"); } // --- Wait for data --- // /* If you want to change the time-based filter programmatically (e.g., * to 2 seconds) rather than using the XML file, you will need to add * the following lines to your code and comment out the * create_datareader call above. */ /* DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); try { subscriber.get_default_datareader_qos(datareader_qos); } catch (DDS.Exception e) { Console.WriteLine("get_default_datareader_qos error {0}", e); shutdown(participant); throw e; } DDS.Duration_t minsep = new DDS.Duration_t(); minsep.sec = 2; // 2 sec datareader_qos.time_based_filter.minimum_separation = minsep; try { subscriber.delete_datareader(ref reader); } catch (DDS.Exception e) { Console.WriteLine("delete_datareader (default qos) error {0}", e); shutdown(participant); throw e; } reader = subscriber.create_datareader(topic, datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader == null) { shutdown(participant); throw new ApplicationException("create_datareader error"); } */ /* Results table header: (1) source timestamp of the sample received; * (2) instance id (instance.code value); and (3) value of x * (instance.x). */ Console.WriteLine("================================================"); Console.WriteLine("Source timestamp\tInstance\tX"); Console.WriteLine("================================================"); /* Main loop */ const System.Int32 receive_period = 4000; // milliseconds for (int count=0; (sample_count == 0) || (count < sample_count); ++count) { /* Console.WriteLine( "tbf subscriber sleeping for {0} sec...", receive_period / 1000); */ System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }
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 subscriber --- // /* To customize the subscriber QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Subscriber subscriber = participant.create_subscriber( DDS.DomainParticipant.SUBSCRIBER_QOS_DEFAULT, 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 = tbfTypeSupport.get_type_name(); try { tbfTypeSupport.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 tbf", 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 */ tbfListener reader_listener = new tbfListener(); /* To customize the data reader QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DataReader reader = subscriber.create_datareader( topic, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader == null) { shutdown(participant); reader_listener = null; throw new ApplicationException("create_datareader error"); } // --- Wait for data --- // /* If you want to change the time-based filter programmatically (e.g., * to 2 seconds) rather than using the XML file, you will need to add * the following lines to your code and comment out the * create_datareader call above. */ /* * DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); * try * { * subscriber.get_default_datareader_qos(datareader_qos); * } * catch (DDS.Exception e) * { * Console.WriteLine("get_default_datareader_qos error {0}", e); * shutdown(participant); * throw e; * } * * DDS.Duration_t minsep = new DDS.Duration_t(); * minsep.sec = 2; // 2 sec * datareader_qos.time_based_filter.minimum_separation = minsep; * * try * { * subscriber.delete_datareader(ref reader); * } * catch (DDS.Exception e) * { * Console.WriteLine("delete_datareader (default qos) error {0}", e); * shutdown(participant); * throw e; * } * * reader = subscriber.create_datareader(topic, * datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); * if (reader == null) * { * shutdown(participant); * throw new ApplicationException("create_datareader error"); * } */ /* Results table header: (1) source timestamp of the sample received; * (2) instance id (instance.code value); and (3) value of x * (instance.x). */ Console.WriteLine("================================================"); Console.WriteLine("Source timestamp\tInstance\tX"); Console.WriteLine("================================================"); /* Main loop */ const System.Int32 receive_period = 4000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { /* Console.WriteLine( * "tbf subscriber sleeping for {0} sec...", * receive_period / 1000); */ System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }