Пример #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 topic --- //

        /* Register the type before creating the topic */
        System.String type_name = orderedTypeSupport.get_type_name();
        try {
            orderedTypeSupport.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 ordered",
            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");
        }

        /* Start changes for Ordered_Presentation */

        /* Create two subscribers to illustrate different presentation QoS
         * This is a publisher/subscriber level QoS, so we have to
         * do it here instead of just making two datareaders
         */

        DDS.Subscriber[] subscriber = new DDS.Subscriber[MAX_SUBSCRIBERS];
        DDS.DataReader[] reader     = new DDS.DataReader[MAX_SUBSCRIBERS];

        /* Subscriber[0], reader[0] and ordered_reader[0] is getting
         * the profile "ordered_Profile_subscriber_instance"
         */
        /* Subscriber[1], reader[1] and ordered_reader[1] is getting
         * the profile "ordered_Profile_subscriber_topic"
         */
        String[] profile_name = new String[MAX_SUBSCRIBERS]
        {
            "ordered_Profile_subscriber_instance",
            "ordered_Profile_subscriber_topic"
        };
        for (int i = 0; i < MAX_SUBSCRIBERS; ++i)
        {
            Console.WriteLine("Subscriber {0} using {1}", i, profile_name[i]);
            subscriber[i] = participant.create_subscriber_with_profile(
                "ordered_Library", profile_name[i], null,
                DDS.StatusMask.STATUS_MASK_NONE);
            if (subscriber[i] == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_subscriber error");
            }

            reader[i] = subscriber[i].create_datareader_with_profile(topic,
                                                                     "ordered_Library", profile_name[i], null,
                                                                     DDS.StatusMask.STATUS_MASK_ALL);
            if (reader[i] == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_datareader error");
            }
        }

        /* If you want to change the Publisher's QoS programmatically rather
         * than using the XML file, you will need to add the following lines to
         * your code and comment out the above 'for' loop.
         */
        /* Get default subscriber QoS to customize */

/*        DDS.SubscriberQos subscriber_qos = new DDS.SubscriberQos();
 *      participant.get_default_subscriber_qos(subscriber_qos);
 *
 */        /* Set this for both subscribers */
/*        subscriber_qos.presentation.ordered_access = true;
 *
 */        /* No listener needed, but we do need to increase history depth */

        /* Get default datareader QoS to customize */

/*        DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos();
 *
 *      for (int i = 0; i < MAX_SUBSCRIBERS; ++i) {
 *          if (i == 0) {
 *              Console.WriteLine("Subscriber 0 using Instance access scope");
 *              subscriber_qos.presentation.access_scope =
 *                  DDS.PresentationQosPolicyAccessScopeKind
 *                      .INSTANCE_PRESENTATION_QOS;
 *          } else {
 *              Console.WriteLine("Subscriber 1 using Topic access scope");
 *              subscriber_qos.presentation.access_scope =
 *                  DDS.PresentationQosPolicyAccessScopeKind
 *                      .TOPIC_PRESENTATION_QOS;
 *          }
 *
 */            /* To create subscriber with default QoS, use
 * DDS.DomainParticipant.SUBSCRIBER_QOS_DEFAULTinstead of
 * subscriber_qos */
/*            subscriber[i] = participant.create_subscriber(
 *              subscriber_qos, null, DDS.StatusMask.STATUS_MASK_NONE);
 *          if (subscriber == null) {
 *              shutdown(participant);
 *              throw new ApplicationException("create_subscriber error");
 *          }
 *          subscriber[i].get_default_datareader_qos(datareader_qos);
 *          datareader_qos.history.depth = 10;
 *
 */            /* To create datareader with default QoS, use
 * DDS.Subscriber.DATAREADER_QOS_DEFAULT instead of datareader_qos
 */
/*            reader[i] = subscriber[i].create_datareader(
 *              topic,
 *              datareader_qos,
 *              null,
 *              DDS.StatusMask.STATUS_MASK_NONE);
 *          if (reader[i] == null) {
 *              shutdown(participant);
 *              throw new ApplicationException("create_datareader error");
 *          }
 *      }
 *
 */
        // --- Wait for data --- //

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

        for (int count = 0;
             (sample_count == 0) || (count < sample_count);
             ++count)
        {
            Console.WriteLine(
                "\nSleeping for {0} sec...\n-----",
                receive_period / 1000);

            System.Threading.Thread.Sleep(receive_period);

            poll_data(reader, 2);
        }

        // --- Shutdown --- //

        /* Delete all entities */
        shutdown(participant);
    }
Пример #2
0
    static void subscribe(int domain_id, int sample_count, int turbo_mode_on)
    {
        System.String profile_name = null;
        System.String library_name = "batching_Library";

        /* We pick the profile name if the turbo_mode is selected or not.
         * If Turbo_mode is not selected, the batching profile will be used.
         */

        if (turbo_mode_on == 1)
        {
            profile_name = "turbo_mode_profile";
            Console.WriteLine("Turbo Mode enable");
        }
        else
        {
            profile_name = "batch_profile";
            Console.WriteLine("Manual batching enable");
        }

        // --- Create participant --- //

        /* To customize the participant QoS, use
         * the configuration file USER_QOS_PROFILES.xml */
        DDS.DomainParticipant participant =
            DDS.DomainParticipantFactory.get_instance().
            create_participant_with_profile(
                domain_id,
                library_name, profile_name,
                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_with_profile(
            library_name, profile_name,
            null /* listener */,
            DDS.StatusMask.STATUS_MASK_NONE);
        if (subscriber == null)
        {
            shutdown(participant);
            throw new ApplicationException("create_subscriber error");
        }

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

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

        /* To customize the data reader QoS, use
         * the configuration file USER_QOS_PROFILES.xml */
        DDS.DataReader reader = subscriber.create_datareader_with_profile(
            topic,
            library_name, profile_name,
            reader_listener,
            DDS.StatusMask.STATUS_MASK_ALL);
        if (reader == null)
        {
            shutdown(participant);
            reader_listener = null;
            throw new ApplicationException("create_datareader error");
        }

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

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

        for (int count = 0;
             (sample_count == 0) || (count < sample_count);
             ++count)
        {
            Console.WriteLine(
                "batch_data subscriber sleeping for {0} sec...",
                receive_period / 1000);

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

        // --- Shutdown --- //

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