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; }
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; }