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"); } /* If you want to change the type_code_max_serialized_length * programmatically (e.g., to 3070) rather than using the XML file, you * will need to add the following lines to your code and comment out the * create_participant call above. */ /* * DDS.DomainParticipantQos participant_qos = * new DDS.DomainParticipantQos(); * try { * DDS.DomainParticipantFactory.get_instance(). * get_default_participant_qos(participant_qos); * * } catch (DDS.Exception) { * Console.WriteLine("error in participant_qos"); * } * * participant_qos.resource_limits.type_code_max_serialized_length = 3070; * * try { * DDS.DomainParticipantFactory.get_instance().delete_participant( * ref participant); * } * catch (DDS.Exception) { * Console.WriteLine("error deleting participant"); * } * * participant = * DDS.DomainParticipantFactory.get_instance().create_participant( * domain_id, participant_qos, null, DDS.StatusMask.STATUS_MASK_NONE); */ /* We don't actually care about receiving the samples, just the * topic information. To do this, we only need the builtin * datareader for publications. */ /* First get the built-in subscriber */ // --- Create subscriber --- // /* To customize the subscriber QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.Subscriber builtin_subscriber = participant.get_builtin_subscriber(); if (builtin_subscriber == null) { shutdown(participant); throw new ApplicationException("creating builtin subscriber error"); } /* Then get the data reader for the built-in subscriber */ DDS.PublicationBuiltinTopicDataDataReader builtin_publication_datareader = (DDS.PublicationBuiltinTopicDataDataReader) builtin_subscriber.lookup_datareader( DDS.PublicationBuiltinTopicDataTypeSupport. PUBLICATION_TOPIC_NAME); if (builtin_publication_datareader == null) { shutdown(participant); throw new ApplicationException("creating builtin publication data" + " reader error"); } /* Finally install the listener */ BuiltinPublicationListener builtin_publication_listener = new BuiltinPublicationListener(); builtin_publication_datareader.set_listener( builtin_publication_listener, DDS.StatusMask.STATUS_MASK_ALL); /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); builtin_publication_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"); } /* If you want to change the type_code_max_serialized_length * programmatically (e.g., to 3070) rather than using the XML file, you * will need to add the following lines to your code and comment out the * create_participant call above. */ /* DDS.DomainParticipantQos participant_qos = new DDS.DomainParticipantQos(); try { DDS.DomainParticipantFactory.get_instance(). get_default_participant_qos(participant_qos); } catch (DDS.Exception) { Console.WriteLine("error in participant_qos"); } participant_qos.resource_limits.type_code_max_serialized_length = 3070; try { DDS.DomainParticipantFactory.get_instance().delete_participant( ref participant); } catch (DDS.Exception) { Console.WriteLine("error deleting participant"); } participant = DDS.DomainParticipantFactory.get_instance().create_participant( domain_id, participant_qos, null, DDS.StatusMask.STATUS_MASK_NONE); */ /* We don't actually care about receiving the samples, just the * topic information. To do this, we only need the builtin * datareader for publications. */ /* First get the built-in subscriber */ // --- Create subscriber --- // /* To customize the subscriber QoS, use the configuration file USER_QOS_PROFILES.xml */ DDS.Subscriber builtin_subscriber = participant.get_builtin_subscriber(); if (builtin_subscriber == null) { shutdown(participant); throw new ApplicationException("creating builtin subscriber error"); } /* Then get the data reader for the built-in subscriber */ DDS.PublicationBuiltinTopicDataDataReader builtin_publication_datareader = (DDS.PublicationBuiltinTopicDataDataReader) builtin_subscriber.lookup_datareader( DDS.PublicationBuiltinTopicDataTypeSupport. PUBLICATION_TOPIC_NAME); if (builtin_publication_datareader == null) { shutdown(participant); throw new ApplicationException("creating builtin publication data" + " reader error"); } /* Finally install the listener */ BuiltinPublicationListener builtin_publication_listener = new BuiltinPublicationListener(); builtin_publication_datareader.set_listener( builtin_publication_listener, DDS.StatusMask.STATUS_MASK_ALL); /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count=0; (sample_count == 0) || (count < sample_count); ++count) { System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); builtin_publication_listener = null; }