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 = ccfTypeSupport.get_type_name(); try { ccfTypeSupport.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 ccf", 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 Custom Content Filter */ /* Create and register custom filter */ custom_filter_type custom_filter = new custom_filter_type(); try { participant.register_contentfilter("CustomFilter", custom_filter); } catch (DDS.Exception e) { Console.WriteLine("write error {0}", e); } DDS.StringSeq parameters = new DDS.StringSeq(2); DDS.StringWrapper[] param_list = { "2", "divides" }; parameters.from_array(param_list); /* Create content filtered topic */ DDS.ContentFilteredTopic cft = participant.create_contentfilteredtopic_with_filter( "ContentFilteredTopic", topic, "%0 %1 x", parameters, "CustomFilter"); // custom filter name if (cft == null) { shutdown(participant); throw new ApplicationException( "create_contentfilteredtopic_with_filter error"); } Console.WriteLine("Filter: 2 divides x"); /* Also note that we pass 'cft' rather than 'topic' to the * datareader below */ /* End changes for Custom Contet Filter */ // --- Create reader --- // /* Create a data reader listener */ ccfListener reader_listener = new ccfListener(); /* * NOTE THAT WE USE THE PREVIOUSLY CREATED CUSTOM FILTERED * TOPIC TO READ NEW SAMPLES */ /* 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, 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 = 1000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { if (count == 10) { Console.WriteLine("changing filter parameters"); Console.WriteLine("Filter: 15 greater-than x"); parameters.set_at(0, "15"); parameters.set_at(1, "greater-than"); cft.set_expression_parameters(parameters); } else if (count == 20) { Console.WriteLine("changing filter parameters"); Console.WriteLine("Filter: 3 divides x"); DDS.StringSeq old_parameters = new DDS.StringSeq(); cft.get_expression_parameters(old_parameters); old_parameters.set_at(0, "3"); old_parameters.set_at(1, "divides"); cft.set_expression_parameters(old_parameters); } System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ 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 = ccfTypeSupport.get_type_name(); try { ccfTypeSupport.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( "Example ccf", 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 Custom_Content_Filter */ /* Create and register custom filter */ custom_filter_type custom_filter = new custom_filter_type(); try { participant.register_contentfilter("Customfilter", custom_filter); } catch (DDS.Exception e) { Console.WriteLine("write error {0}", e); } /* End changes for Custom_Content_Filter */ // --- 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"); } ccfDataWriter ccf_writer = (ccfDataWriter)writer; // --- Write --- // /* Create data sample for writing */ ccf instance = ccfTypeSupport.create_data(); if (instance == null) { shutdown(participant); throw new ApplicationException( "ccfTypeSupport.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_handle = ccf_writer.register_instance(instance); */ /* Main loop */ const System.Int32 send_period = 1000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine("Writing ccf, count {0}", count); /* Modify the data to be sent here */ instance.x = count; try { ccf_writer.write(instance, ref instance_handle); } catch (DDS.Exception e) { Console.WriteLine("write error {0}", e); } System.Threading.Thread.Sleep(send_period); } /* * try { * ccf_writer.unregister_instance( * instance, ref instance_handle); * } catch(DDS.Exception e) { * Console.WriteLine("unregister instance error: {0}", e); * } */ // --- Shutdown --- // /* Delete data sample */ try { ccfTypeSupport.delete_data(instance); } catch (DDS.Exception e) { Console.WriteLine( "ccfTypeSupport.delete_data error: {0}", e); } /* Delete all entities */ shutdown(participant); }