Beispiel #1
0
            public override void on_data_available(DDS.DataReader reader)
            {
                ChatObjectDataReader ChatObject_reader =
                    (ChatObjectDataReader)reader;

                try {
                    ChatObject_reader.read( /*>>><<<*/
                        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/read 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)
                    {
                        ChatObjectTypeSupport.print_data(data_seq.get_at(i));
                    }
                }

                try {
                    ChatObject_reader.return_loan(data_seq, info_seq);
                }
                catch (DDS.Exception e) {
                    Console.WriteLine("return loan error {0}", e);
                }
            }
Beispiel #2
0
        static void subscribe(int domain_id, int sample_count)
        {
            // --- Register userGenerated datatype ---
            DDS.DomainParticipantFactory.get_instance().
            register_type_support(
                ChatObjectTypeSupport.get_instance(),
                "My::Type::Chat::Obj");

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

            /* To customize the participant QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DomainParticipant participant =
                DDS.DomainParticipantFactory.get_instance().
                create_participant_from_config(
                    "MyParticipant_Library::MySubscriptionParticipant");
            if (participant == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_participant error");
            }

            /* Create a data reader listener */
            ChatObjectListener reader_listener =
                new ChatObjectListener();

            // --- Lookup reader --- //

            /* To customize the data reader QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DataReader reader = participant.lookup_datareader_by_name(
                "MySubscriber::ChatObjectReader");
            if (reader == null)
            {
                shutdown(participant);
                reader_listener = null;
                throw new ApplicationException("lookup_datareader error");
            }

            /* >>> Setup StatusCondition */
            DDS.StatusCondition status_condition = reader.get_statuscondition();
            if (status_condition.Equals(null))
            {
                Console.WriteLine("get_statuscondition error\n");
                shutdown(participant);
                throw new ApplicationException("get_statuscondition error");
            }
            try {
                status_condition.set_enabled_statuses((DDS.StatusMask)DDS.StatusKind.DATA_AVAILABLE_STATUS);
            }
            catch {
                Console.WriteLine("set_enabled_statuses error\n");
                shutdown(participant);
                throw new ApplicationException("set_enabled_statuses error");
            }
            /* <<< */

            /* >>> Setup WaitSet */
            DDS.WaitSet waitset = new DDS.WaitSet();
            try {
                waitset.attach_condition(status_condition);
            }
            catch {
                // ... error
                waitset.Dispose(); waitset = null;
                shutdown(participant);
                reader_listener.Dispose(); reader_listener = null;
                return;
            }

            // holder for active conditions
            DDS.ConditionSeq active_conditions = new DDS.ConditionSeq();
            /* <<< */

            // --- 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(
                    "ChatObject subscriber sleeping ...",
                    receive_period / 1000);


                /* >>> Wait for condition to trigger */
                try {
                    waitset.wait(active_conditions, DDS.Duration_t.DURATION_INFINITE);
                    reader_listener.on_data_available(reader);
                }
                catch {
                }
                /* <<< */

                // System.Threading.Thread.Sleep(receive_period); /*>>><<<*/
            }

            // --- Shutdown --- //

            /* Delete all entities */
            waitset.Dispose(); waitset = null; /*>>><<<*/
            shutdown(participant);
            reader_listener = null;
        }
Beispiel #3
0
        static void publish(int domain_id, int sample_count)
        {
            // --- Create participant --- //

            /* To customize 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 publisher --- //

            /* To customize publisher QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.Publisher publisher = participant.create_publisher(
                DDS.DomainParticipant.PUBLISHER_QOS_DEFAULT,
                null /* listener */,
                DDS.StatusMask.STATUS_MASK_NONE);
            if (publisher == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_publisher error");
            }

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

            /* Register type before creating topic */
            System.String type_name = ChatObjectTypeSupport.get_type_name();
            try {
                ChatObjectTypeSupport.register_type(
                    participant, type_name);
            }
            catch (DDS.Exception e) {
                Console.WriteLine("register_type error {0}", e);
                shutdown(participant);
                throw e;
            }

            /* To customize topic QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.Topic topic = participant.create_topic(
                My.CHAT_TOPIC_NAME.VALUE, /*>>><<<*/
                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 writer --- //

            /* To customize data writer QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DataWriter writer = publisher.create_datawriter(
                topic,
                DDS.Publisher.DATAWRITER_QOS_DEFAULT,
                null /* listener */,
                DDS.StatusMask.STATUS_MASK_NONE);
            if (writer == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_datawriter error");
            }
            ChatObjectDataWriter ChatObject_writer =
                (ChatObjectDataWriter)writer;

            // --- Write --- //

            /* Create data sample for writing */
            ChatObject instance = ChatObjectTypeSupport.create_data();

            if (instance == null)
            {
                shutdown(participant);
                throw new ApplicationException(
                          "ChatObjectTypeSupport.create_data error");
            }

            /* For a data type that has a key, if the same instance is going to be
             * written multiple times, initialize the key here
             * and register the keyed instance prior to writing */
            /* >>> */
            DDS.InstanceHandle_t instance_handle = DDS.InstanceHandle_t.HANDLE_NIL;
            instance.user = "******";
            // instance_handle = ChatObject_writer.register_instance(instance);
            /* <<< */

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

            for (int count = 0;
                 (sample_count == 0) || (count < sample_count);
                 ++count)
            {
                Console.WriteLine("Writing ChatObject, count {0}", count);

                /* Modify the data to be sent here */
                /* >>> */
                instance.msg = "Hello " + count;
                /* <<< */


                try {
                    ChatObject_writer.write(instance, ref instance_handle);
                }
                catch (DDS.Exception e) {
                    Console.WriteLine("write error {0}", e);
                }

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

            /*
             * try {
             *  ChatObject_writer.unregister_instance(
             *      instance, ref instance_handle);
             * } catch(DDS.Exception e) {
             *  Console.WriteLine("unregister instance error: {0}", e);
             * }
             */

            // --- Shutdown --- //

            /* Delete data sample */
            try {
                ChatObjectTypeSupport.delete_data(instance);
            } catch (DDS.Exception e) {
                Console.WriteLine(
                    "ChatObjectTypeSupport.delete_data error: {0}", e);
            }

            /* Delete all entities */
            shutdown(participant);
        }
Beispiel #4
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");
            }

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

            /* Register the type before creating the topic */
            System.String type_name = ChatObjectTypeSupport.get_type_name();
            try {
                ChatObjectTypeSupport.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(
                My.CHAT_TOPIC_NAME.VALUE, /*>>><<<*/
                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 ContentFiltered Topic */
            DDS.StringWrapper[] cft_param_list = new DDS.StringWrapper[] { "'Rajive'", "'Shannon'", "'Jaromy'" };
            DDS.StringSeq       cft_parameters = new DDS.StringSeq(3);
            cft_parameters.from_array(cft_param_list);

            DDS.ContentFilteredTopic cft = participant.create_contentfilteredtopic("Chat/filtered",
                                                                                   topic, "(id = %0 OR id = %1 OR id = %2)",
                                                                                   cft_parameters);

            if (cft == null)
            {
                Console.WriteLine("create_contentfilteredtopic error\n");
                shutdown(participant);
                throw new ApplicationException("create_contentfilteredtopic error");
            }
            /* <<< */


            // --- Create reader --- //

            /* Create a data reader listener */
            ChatObjectListener reader_listener =
                new ChatObjectListener();

            /* To customize the data reader QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DataReader reader = subscriber.create_datareader(
                cft,                              /*>>><<<*/
                DDS.Subscriber.DATAREADER_QOS_DEFAULT,
                null,                             /*>>><<<*/
                DDS.StatusMask.STATUS_MASK_NONE); /*>>><<<*/
            if (reader == null)
            {
                shutdown(participant);
                reader_listener = null;
                throw new ApplicationException("create_datareader error");
            }

            /* >>> Setup StatusCondition */
            DDS.StatusCondition status_condition = reader.get_statuscondition();
            if (status_condition.Equals(null))
            {
                Console.WriteLine("get_statuscondition error\n");
                shutdown(participant);
                throw new ApplicationException("get_statuscondition error");
            }
            try {
                status_condition.set_enabled_statuses((DDS.StatusMask)DDS.StatusKind.DATA_AVAILABLE_STATUS);
            }
            catch {
                Console.WriteLine("set_enabled_statuses error\n");
                shutdown(participant);
                throw new ApplicationException("set_enabled_statuses error");
            }
            /* <<< */

            /* >>> Setup WaitSet */
            DDS.WaitSet waitset = new DDS.WaitSet();
            try {
                waitset.attach_condition(status_condition);
            }
            catch {
                // ... error
                waitset.Dispose(); waitset = null;
                shutdown(participant);
                reader_listener.Dispose(); reader_listener = null;
                return;
            }

            // holder for active conditions
            DDS.ConditionSeq active_conditions = new DDS.ConditionSeq();
            /* <<< */


            // --- 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(
                    "ChatObject subscriber sleeping ...",
                    receive_period / 1000);

                /* >>> Wait */
                /* Wait for condition to trigger */
                try {
                    waitset.wait(active_conditions, DDS.Duration_t.DURATION_INFINITE);
                    reader_listener.on_data_available(reader);
                }
                catch {
                }
                /* <<< */

                // System.Threading.Thread.Sleep(receive_period); /*>>><<<*/
            }

            // --- Shutdown --- //

            /* Delete all entities */
            waitset.Dispose(); waitset = null; /*>>><<<*/
            shutdown(participant);
            reader_listener = null;
        }
Beispiel #5
0
        static void publish(int domain_id, int sample_count)
        {
            // --- Register userGenerated datatype ---
            DDS.DomainParticipantFactory.get_instance().
            register_type_support(
                ChatObjectTypeSupport.get_instance(),
                "My::Type::Chat::Obj");

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

            /* To customize the participant QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DomainParticipant participant =
                DDS.DomainParticipantFactory.get_instance().
                create_participant_from_config(
                    "MyParticipant_Library::MyPublicationParticipant");
            if (participant == null)
            {
                shutdown(participant);
                throw new ApplicationException("create_participant error");
            }

            // --- Lookup writer --- //

            /* To customize data writer QoS, use
             * the configuration file USER_QOS_PROFILES.xml */
            DDS.DataWriter writer = participant.lookup_datawriter_by_name(
                "MyPublisher::ChatObjectWriter");
            if (writer == null)
            {
                shutdown(participant);
                throw new ApplicationException("lookup_datawriter error");
            }
            ChatObjectDataWriter ChatObject_writer =
                (ChatObjectDataWriter)writer;

            // --- Write --- //

            /* Create data sample for writing */
            ChatObject instance = ChatObjectTypeSupport.create_data();

            if (instance == null)
            {
                shutdown(participant);
                throw new ApplicationException(
                          "ChatObjectTypeSupport.create_data error");
            }

            /* For a data type that has a key, if the same instance is going to be
             * written multiple times, initialize the key here
             * and register the keyed instance prior to writing */
            /* >>> */
            DDS.InstanceHandle_t instance_handle = DDS.InstanceHandle_t.HANDLE_NIL;
            instance.user = "******";
            // instance_handle = ChatObject_writer.register_instance(instance);
            /* <<< */

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

            for (int count = 0;
                 (sample_count == 0) || (count < sample_count);
                 ++count)
            {
                Console.WriteLine("Writing ChatObject, count {0}", count);

                /* Modify the data to be sent here */
                /* >>> */
                instance.msg = "Hello " + count;
                /* <<< */

                try {
                    ChatObject_writer.write(instance, ref instance_handle);
                }
                catch (DDS.Exception e) {
                    Console.WriteLine("write error {0}", e);
                }

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

            /*
             * try {
             *  ChatObject_writer.unregister_instance(
             *      instance, ref instance_handle);
             * } catch(DDS.Exception e) {
             *  Console.WriteLine("unregister instance error: {0}", e);
             * }
             */

            // --- Shutdown --- //

            /* Delete data sample */
            try {
                ChatObjectTypeSupport.delete_data(instance);
            } catch (DDS.Exception e) {
                Console.WriteLine(
                    "ChatObjectTypeSupport.delete_data error: {0}", e);
            }

            /* Delete all entities */
            shutdown(participant);
        }