示例#1
0
    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);
        }
    }
示例#2
0
    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;
    }