Exemplo n.º 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");
        }

        // --- 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");
        }

        /* If you want to change the DataWriter's QoS programmatically rather than
         * using the XML file, you will need to add the following lines to your
         * code and comment out the create_subscriber call above.
         */

        // Start changes for coherent_presentation
        /* Get default publisher QoS to customize */

/*        DDS.SubscriberQos subscriber_qos = new DDS.SubscriberQos();
 *      participant.get_default_subscriber_qos(subscriber_qos);
 *
 *      subscriber_qos.presentation.access_scope =
 *            DDS.PresentationQosPolicyAccessScopeKind.TOPIC_PRESENTATION_QOS;
 *      subscriber_qos.presentation.coherent_access = true;
 *
 *      DDS.Subscriber subscriber = participant.create_subscriber(
 *          subscriber_qos,
 *          null,
 *          DDS.StatusMask.STATUS_MASK_NONE);
 *      if (subscriber == null) {
 *          shutdown(participant);
 *          throw new ApplicationException("create_subscriber error");
 *      }
 *
 */     // End changes for coherent_presentation

        // --- Create topic --- //

        /* Register the type before creating the topic */
        System.String type_name = coherentTypeSupport.get_type_name();
        try {
            coherentTypeSupport.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 coherent",
            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 */
        coherentListener reader_listener =
            new coherentListener();

        /* 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");
        }

        // Start changes for coherent_presentation

        /* Get default datareader QoS to customize */

/*        DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos();
 *      subscriber.get_default_datareader_qos(datareader_qos);
 *
 *      datareader_qos.reliability.kind =
 *          DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS;
 *      datareader_qos.history.depth = 10;
 *
 *      DDS.DataReader reader = subscriber.create_datareader(
 *          topic,
 *          datareader_qos,
 *          reader_listener,
 *          DDS.StatusMask.STATUS_MASK_ALL);
 *      if (reader == null) {
 *          shutdown(participant);
 *          reader_listener = null;
 *          throw new ApplicationException("create_datareader error");
 *      }
 */     // End changes for coherent_presentation

        // --- Wait for data --- //

        /* Main loop */
        const System.Int32 receive_period = 4000; // milliseconds

        for (int count = 0;
             (sample_count == 0) || (count < sample_count);
             ++count)
        {
            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");
        }

        /* If you want to change the DataWriter's QoS programmatically rather than
         * using the XML file, you will need to add the following lines to your
         * code and comment out the create_subscriber call above.
         */

        // Start changes for coherent_presentation
        /* Get default publisher QoS to customize */
        /*        DDS.SubscriberQos subscriber_qos = new DDS.SubscriberQos();
        participant.get_default_subscriber_qos(subscriber_qos);

        subscriber_qos.presentation.access_scope =
              DDS.PresentationQosPolicyAccessScopeKind.TOPIC_PRESENTATION_QOS;
        subscriber_qos.presentation.coherent_access = true;

        DDS.Subscriber subscriber = participant.create_subscriber(
            subscriber_qos,
            null,
            DDS.StatusMask.STATUS_MASK_NONE);
        if (subscriber == null) {
            shutdown(participant);
            throw new ApplicationException("create_subscriber error");
        }

        */        // End changes for coherent_presentation

        // --- Create topic --- //

        /* Register the type before creating the topic */
        System.String type_name = coherentTypeSupport.get_type_name();
        try {
            coherentTypeSupport.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 coherent",
            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 */
        coherentListener reader_listener =
            new coherentListener();

        /* 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");
        }

        // Start changes for coherent_presentation

        /* Get default datareader QoS to customize */
        /*        DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos();
        subscriber.get_default_datareader_qos(datareader_qos);

        datareader_qos.reliability.kind =
            DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS;
        datareader_qos.history.depth = 10;

        DDS.DataReader reader = subscriber.create_datareader(
            topic,
            datareader_qos,
            reader_listener,
            DDS.StatusMask.STATUS_MASK_ALL);
        if (reader == null) {
            shutdown(participant);
            reader_listener = null;
            throw new ApplicationException("create_datareader error");
        }
        */        // End changes for coherent_presentation

        // --- Wait for data --- //

        /* Main loop */
        const System.Int32 receive_period = 4000; // milliseconds
        for (int count = 0;
             (sample_count == 0) || (count < sample_count);
             ++count) {

            System.Threading.Thread.Sleep(receive_period);
        }

        // --- Shutdown --- //

        /* Delete all entities */
        shutdown(participant);
        reader_listener = null;
    }