static void subscribe(int domain_id, int sample_count, int sel_cft) { // --- 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 = cftTypeSupport.get_type_name(); try { cftTypeSupport.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 cft", 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"); } /* Sequence of parameters for the content filter expression */ DDS.StringSeq parameters = new DDS.StringSeq(2); /* The default parameter list that we will include in the * sequence of parameters will be "1","4" (i.e., 1 <= x <= 4). */ DDS.StringWrapper[] param_list = new DDS.StringWrapper[2] { "1", "4" }; parameters.from_array(param_list); /* Create the content filtered topic in case sel_cft * is true. * The Content Filter Expresion has two parameters: * - %0 -- x must be greater or equal than %0. * - %1 -- x must be less or equal than %1. */ DDS.ContentFilteredTopic cft = null; if (sel_cft != 0) { cft = participant.create_contentfilteredtopic( "ContentFilteredTopic", topic, "(x >= %0 and x <= %1)", parameters); if (cft == null) { shutdown(participant); throw new ApplicationException( "create_contentfilteredtopic error"); } } // --- Create reader --- // /* Create a data reader listener */ cftListener reader_listener = new cftListener(); /* Here we create the reader either using a Content Filtered Topic or * a normal topic */ DDS.DataReader reader = null; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, 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"); } /* If you want to set the reliability and history QoS settings * programmatically rather than using the XML, you will need to add * the following lines to your code and comment out the * create_datareader calls above. */ /* * DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); * try { * subscriber.get_default_datareader_qos(datareader_qos); * } catch (DDS.Exception e) { * Console.WriteLine("get_default_datareader_qos error {0}", e); * shutdown(participant); * throw e; * } * * datareader_qos.reliability.kind = * DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS; * datareader_qos.durability.kind = * DDS.DurabilityQosPolicyKind.TRANSIENT_LOCAL_DURABILITY_QOS; * datareader_qos.history.kind = * DDS.HistoryQosPolicyKind.KEEP_LAST_HISTORY_QOS; * datareader_qos.history.depth = 20; * * if (sel_cft != 0) { * Console.WriteLine("Using ContentFiltered Topic"); * reader = subscriber.create_datareader(cft, * datareader_qos, reader_listener, * DDS.StatusMask.STATUS_MASK_ALL); * } else { * Console.WriteLine("Using Normal Topic"); * reader = subscriber.create_datareader(topic, * datareader_qos, reader_listener, * DDS.StatusMask.STATUS_MASK_ALL); * } * * if (reader == null) { * shutdown(participant); * reader_listener = null; * throw new ApplicationException("create_datareader error"); * } * */ if (sel_cft != 0) { Console.WriteLine("\n=========================="); Console.WriteLine("Using CFT\nFilter: 1 <= x <= 4"); Console.WriteLine("=========================="); } // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "cft subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); if (sel_cft == 0) { continue; } if (count == 10) { Console.WriteLine("\n=========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Filter: 5 <= x <= 9"); Console.WriteLine("==========================="); parameters.set_at(0, "5"); parameters.set_at(1, "9"); try { cft.set_expression_parameters(parameters); } catch (DDS.Exception e) { Console.WriteLine("set_expression_parameters error {0}", e); shutdown(participant); throw e; } } else if (count == 20) { Console.WriteLine("\n=========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Filter: 3 <= x <= 9"); Console.WriteLine("==========================="); DDS.StringSeq oldParameters = new DDS.StringSeq(); cft.get_expression_parameters(oldParameters); oldParameters.set_at(0, "3"); try { cft.set_expression_parameters(oldParameters); } catch (DDS.Exception e) { Console.WriteLine("set_expression_parameters error {0}", e); shutdown(participant); throw e; } } } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }
static void subscribe(int domain_id, int sample_count, int sel_cft) { // --- 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 = cftTypeSupport.get_type_name(); try { cftTypeSupport.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 cft", 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"); } /* Sequence of parameters for the content filter expression */ DDS.StringSeq parameters = new DDS.StringSeq(2); /* The default parameter list that we will include in the * sequence of parameters will be "1","4" (i.e., 1 <= x <= 4). */ DDS.StringWrapper[] param_list = new DDS.StringWrapper[2] {"1", "4"}; parameters.from_array(param_list); /* Create the content filtered topic in case sel_cft * is true. * The Content Filter Expresion has two parameters: * - %0 -- x must be greater or equal than %0. * - %1 -- x must be less or equal than %1. */ DDS.ContentFilteredTopic cft = null; if (sel_cft != 0) { cft = participant.create_contentfilteredtopic( "ContentFilteredTopic", topic, "(x >= %0 and x <= %1)", parameters); if (cft == null) { shutdown(participant); throw new ApplicationException( "create_contentfilteredtopic error"); } } // --- Create reader --- // /* Create a data reader listener */ cftListener reader_listener = new cftListener(); /* Here we create the reader either using a Content Filtered Topic or * a normal topic */ DDS.DataReader reader = null; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, 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"); } /* If you want to set the reliability and history QoS settings * programmatically rather than using the XML, you will need to add * the following lines to your code and comment out the * create_datareader calls above. */ /* DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); try { subscriber.get_default_datareader_qos(datareader_qos); } catch (DDS.Exception e) { Console.WriteLine("get_default_datareader_qos error {0}", e); shutdown(participant); throw e; } datareader_qos.reliability.kind = DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS; datareader_qos.durability.kind = DDS.DurabilityQosPolicyKind.TRANSIENT_LOCAL_DURABILITY_QOS; datareader_qos.history.kind = DDS.HistoryQosPolicyKind.KEEP_LAST_HISTORY_QOS; datareader_qos.history.depth = 20; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } if (reader == null) { shutdown(participant); reader_listener = null; throw new ApplicationException("create_datareader error"); } */ if (sel_cft != 0) { Console.WriteLine("\n=========================="); Console.WriteLine("Using CFT\nFilter: 1 <= x <= 4"); Console.WriteLine("=========================="); } // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count=0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "cft subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); if (sel_cft == 0) { continue; } if (count == 10) { Console.WriteLine("\n=========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Filter: 5 <= x <= 9"); Console.WriteLine("==========================="); parameters.set_at(0, "5"); parameters.set_at(1, "9"); try { cft.set_expression_parameters(parameters); } catch (DDS.Exception e) { Console.WriteLine("set_expression_parameters error {0}", e); shutdown(participant); throw e; } } else if (count == 20) { Console.WriteLine("\n=========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Filter: 3 <= x <= 9"); Console.WriteLine("==========================="); DDS.StringSeq oldParameters = new DDS.StringSeq(); cft.get_expression_parameters(oldParameters); oldParameters.set_at(0, "3"); try { cft.set_expression_parameters(oldParameters); } catch (DDS.Exception e) { Console.WriteLine("set_expression_parameters error {0}", e); shutdown(participant); throw e; } } } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }
static void subscribe(int domain_id, int sample_count, int sel_cft) { // --- 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 = cftTypeSupport.get_type_name(); try { cftTypeSupport.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 cft", 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"); } /* For this filter we only allow 1 parameter */ DDS.StringSeq parameters = new DDS.StringSeq(1); /* The default parameter list that we will include in the * sequence of parameters will be "SOME_STRING" */ DDS.StringWrapper[] param_list = new DDS.StringWrapper[1] { "SOME_STRING" }; parameters.from_array(param_list); DDS.ContentFilteredTopic cft = null; if (sel_cft == 1) { /* create_contentfilteredtopic_with_filter */ cft = participant.create_contentfilteredtopic_with_filter( "ContentFilteredTopic", topic, "name MATCH %0", parameters, DDS.DomainParticipant.STRINGMATCHFILTER_NAME); if (cft == null) { shutdown(participant); throw new ApplicationException( "create_contentfilteredtopic_with_filter error"); } } // --- Create reader --- // /* Create a data reader listener */ cftListener reader_listener = new cftListener(); DDS.DataReader reader = null; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, 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"); } /* If you want to set the reliability and history QoS settings * programmatically rather than using the XML, you will need to add * the following lines to your code and comment out the * create_datareader calls above. */ /* DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); try { subscriber.get_default_datareader_qos(datareader_qos); } catch (DDS.Exception e) { Console.WriteLine("get_default_datareader_qos error {0}", e); shutdown(participant); throw e; } datareader_qos.reliability.kind = DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS; datareader_qos.durability.kind = DDS.DurabilityQosPolicyKind.TRANSIENT_LOCAL_DURABILITY_QOS; datareader_qos.history.kind = DDS.HistoryQosPolicyKind.KEEP_LAST_HISTORY_QOS; datareader_qos.history.depth = 20; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, datareader_qos, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } if (reader == null) { shutdown(participant); reader_listener = null; throw new ApplicationException("create_datareader error"); } */ /* Change the filter */ if (sel_cft == 1) { Console.WriteLine(">>> Now setting a new filter: name MATCH \"EVEN\""); try { cft.append_to_expression_parameter(0, "EVEN"); } catch (DDS.Exception e) { Console.WriteLine("append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count=0; (sample_count == 0) || (count < sample_count); ++count) { System.Threading.Thread.Sleep(receive_period); if (sel_cft == 0) { continue; } if (count == 10) { Console.WriteLine("\n==========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Append 'ODD' filter"); Console.WriteLine("==========================="); try { cft.append_to_expression_parameter(0, "ODD"); } catch (DDS.Exception e) { Console.WriteLine( "append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } if (count == 20) { Console.WriteLine("\n==========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Removing 'EVEN' filter"); Console.WriteLine("==========================="); try { cft.remove_from_expression_parameter(0, "EVEN"); } catch (DDS.Exception e) { Console.WriteLine( "append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }
static void subscribe(int domain_id, int sample_count, int sel_cft) { // --- 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 = cftTypeSupport.get_type_name(); try { cftTypeSupport.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 cft", 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"); } /* For this filter we only allow 1 parameter */ DDS.StringSeq parameters = new DDS.StringSeq(1); /* The default parameter list that we will include in the * sequence of parameters will be "SOME_STRING" */ DDS.StringWrapper[] param_list = new DDS.StringWrapper[1] { "SOME_STRING" }; parameters.from_array(param_list); DDS.ContentFilteredTopic cft = null; if (sel_cft == 1) { /* create_contentfilteredtopic_with_filter */ cft = participant.create_contentfilteredtopic_with_filter( "ContentFilteredTopic", topic, "name MATCH %0", parameters, DDS.DomainParticipant.STRINGMATCHFILTER_NAME); if (cft == null) { shutdown(participant); throw new ApplicationException( "create_contentfilteredtopic_with_filter error"); } } // --- Create reader --- // /* Create a data reader listener */ cftListener reader_listener = new cftListener(); DDS.DataReader reader = null; if (sel_cft != 0) { Console.WriteLine("Using ContentFiltered Topic"); reader = subscriber.create_datareader(cft, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { Console.WriteLine("Using Normal Topic"); reader = subscriber.create_datareader(topic, 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"); } /* If you want to set the reliability and history QoS settings * programmatically rather than using the XML, you will need to add * the following lines to your code and comment out the * create_datareader calls above. */ /* * DDS.DataReaderQos datareader_qos = new DDS.DataReaderQos(); * try { * subscriber.get_default_datareader_qos(datareader_qos); * } catch (DDS.Exception e) { * Console.WriteLine("get_default_datareader_qos error {0}", e); * shutdown(participant); * throw e; * } * * datareader_qos.reliability.kind = * DDS.ReliabilityQosPolicyKind.RELIABLE_RELIABILITY_QOS; * datareader_qos.durability.kind = * DDS.DurabilityQosPolicyKind.TRANSIENT_LOCAL_DURABILITY_QOS; * datareader_qos.history.kind = * DDS.HistoryQosPolicyKind.KEEP_LAST_HISTORY_QOS; * datareader_qos.history.depth = 20; * * if (sel_cft != 0) { * Console.WriteLine("Using ContentFiltered Topic"); * reader = subscriber.create_datareader(cft, * datareader_qos, reader_listener, * DDS.StatusMask.STATUS_MASK_ALL); * } else { * Console.WriteLine("Using Normal Topic"); * reader = subscriber.create_datareader(topic, * datareader_qos, reader_listener, * DDS.StatusMask.STATUS_MASK_ALL); * } * * if (reader == null) { * shutdown(participant); * reader_listener = null; * throw new ApplicationException("create_datareader error"); * } * */ /* Change the filter */ if (sel_cft == 1) { Console.WriteLine(">>> Now setting a new filter: name MATCH \"EVEN\""); try { cft.append_to_expression_parameter(0, "EVEN"); } catch (DDS.Exception e) { Console.WriteLine("append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } // --- Wait for data --- // /* Main loop */ const System.Int32 receive_period = 1000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { System.Threading.Thread.Sleep(receive_period); if (sel_cft == 0) { continue; } if (count == 10) { Console.WriteLine("\n==========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Append 'ODD' filter"); Console.WriteLine("==========================="); try { cft.append_to_expression_parameter(0, "ODD"); } catch (DDS.Exception e) { Console.WriteLine( "append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } if (count == 20) { Console.WriteLine("\n==========================="); Console.WriteLine("Changing filter parameters"); Console.WriteLine("Removing 'EVEN' filter"); Console.WriteLine("==========================="); try { cft.remove_from_expression_parameter(0, "EVEN"); } catch (DDS.Exception e) { Console.WriteLine( "append_to_expression_parameter error {0}", e); shutdown(participant); throw e; } } } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }