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