public override void on_data_available(DDS.DataReader reader) { DDS.PublicationBuiltinTopicDataDataReader builtin_reader = (DDS.PublicationBuiltinTopicDataDataReader)reader; try { builtin_reader.take( data_seq, info_seq, DDS.ResourceLimitsQosPolicy.LENGTH_UNLIMITED, DDS.SampleStateKind.ANY_SAMPLE_STATE, DDS.ViewStateKind.ANY_VIEW_STATE, DDS.InstanceStateKind.ANY_INSTANCE_STATE); } catch (DDS.Retcode_NoData) { return; } catch (DDS.Exception e) { Console.WriteLine("take error {0}", e); return; } System.Int32 data_length = data_seq.length; for (int i = 0; i < data_length; ++i) { if (!info_seq.get_at(i).valid_data) { continue; } Console.WriteLine("-----"); Console.WriteLine("Found topic \"{0}\"", data_seq.get_at(i).topic_name); Console.WriteLine("participant: {0:x8}{1:x8}{2:x8}", data_seq.get_at(i).participant_key.value1, data_seq.get_at(i).participant_key.value2, data_seq.get_at(i).participant_key.value3); Console.WriteLine("datawriter: {0:x8}{1:x8}{2:x8}", data_seq.get_at(i).key.value1, data_seq.get_at(i).key.value2, data_seq.get_at(i).key.value3); Console.WriteLine("type:"); if (data_seq.get_at(i).type_code == null) { Console.WriteLine("No type code received, perhaps increase " + "type_code_max_serialized_length?"); continue; } /* Using the type_code propagated we print the data type * with print_IDL(). */ try { data_seq.get_at(i).type_code.print_IDL(2); } catch (DDS.Exception) { Console.WriteLine("error printing IDL"); } } try { builtin_reader.return_loan(data_seq, info_seq); } catch (DDS.Exception e) { Console.WriteLine("return loan error {0}", e); } }
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; }