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