static void subscribe(int domain_id, int sample_count) { /* There are several different approaches for loading QoS profiles from * XML files (see Configuring QoS with XML chapter in the RTI Connext * Core Libraries and Utilities User's Manual). In this example we * illustrate two of them: * * 1) Creating a file named USER_QOS_PROFILES.xml, which is loaded, * automatically by the DomainParticipantFactory. In this case, the file * defines a QoS profile named volatile_profile that configures reliable, * volatile DataWriters and DataReaders. * * 2) Adding XML documents to the DomainParticipantFactory using its * Profile QoSPolicy (DDS Extension). In this case, we add * my_custom_qos_profiles.xml to the url_profile sequence, which stores * the URLs of all the XML documents with QoS policies that are loaded * by the DomainParticipantFactory aside from the ones that are * automatically loaded. * my_custom_qos_profiles.xml defines a QoS profile named * transient_local_profile that configures reliable, transient local * DataWriters and DataReaders. */ /* To load my_custom_qos_profiles.xml, as explained above, we need to * modify the DDSTheParticipantFactory Profile QoSPolicy */ DDS.DomainParticipantFactoryQos factory_qos = new DDS.DomainParticipantFactoryQos(); DDS.DomainParticipantFactory.get_instance().get_qos(factory_qos); /* We are only going to add one XML file to the url_profile sequence, so * we ensure a length of 1,1. */ factory_qos.profile.url_profile.ensure_length(1, 1); /* The XML file will be loaded from the working directory. That means, * you need to run the example like this: * ./objs/<architecture>/profiles_publisher * (see README.txt for more information on how to run the example). * * Note that you can specify the absolute path of the XML QoS file to * avoid this problem. */ factory_qos.profile.url_profile.set_at(0, "file://my_custom_qos_profiles.xml"); DDS.DomainParticipantFactory.get_instance().set_qos(factory_qos); // --- Create participant --- // /* Our default Qos profile, volatile_profile, sets the participant name. * This is the only participant_qos policy that we change in our * example. As this is done in the default QoS profile, we don't need * to specify its name, so we can create the participant using the * create_participant() method rather than using * create_participant_with_profile(). */ 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 --- // /* We haven't changed the subscriber_qos in any of QoS profiles we use * in this example, so we can just use the create_topic() method. If you * want to load an specific profile in which you may have changed the * publisher_qos, use the create_publisher_with_profile() method. */ 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 = profilesTypeSupport.get_type_name(); try { profilesTypeSupport.register_type( participant, type_name); } catch (DDS.Exception e) { Console.WriteLine("register_type error {0}", e); shutdown(participant); throw e; } /* We haven't changed the topic_qos in any of QoS profiles we use in * this example, so we can just use the create_topic() method. If you * want to load an specific profile in which you may have changed the * topic_qos, use the create_topic_with_profile() method. */ DDS.Topic topic = participant.create_topic( "Example profiles", 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 reader --- // /* Create a data reader listener */ profilesListener reader_volatile_listener = new profilesListener("volatile_profile"); profilesListener reader_transient_local_listener = new profilesListener("transient_local_profile"); /* Volatile reader -- As volatile_profile is the default qos profile * we don't need to specify the profile we are going to use, we can * just call create_datareader passing DDS_DATAWRITER_QOS_DEFAULT. */ DDS.DataReader reader_volatile = subscriber.create_datareader( topic, DDS.Subscriber.DATAREADER_QOS_DEFAULT, reader_volatile_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader_volatile == null) { shutdown(participant); reader_volatile = null; throw new ApplicationException("create_datareader_volatile error"); } /* Transient Local writer -- In this case we use * create_datareader_with_profile, because we have to use a profile * other than the default one. This profile has been defined in * my_custom_qos_profiles.xml, but since we already loaded the XML file * we don't need to specify anything else. */ DDS.DataReader reader_transient_local = subscriber.create_datareader_with_profile( topic, "profiles_Library", "transient_local_profile", reader_transient_local_listener, DDS.StatusMask.STATUS_MASK_ALL); if (reader_transient_local == null) { shutdown(participant); reader_transient_local = null; throw new ApplicationException("create_datareader_transient_local" + "error"); } Console.WriteLine("Created reader_transient_local"); // --- 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( "profiles subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_volatile_listener = null; reader_transient_local_listener = null; }
static void subscribe(int domain_id, int sample_count, int drs) { // --- 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 = hello_worldTypeSupport.get_type_name(); try { hello_worldTypeSupport.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 hello_world", 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 reader --- // /* Create a data reader listener */ hello_worldListener reader_listener = new hello_worldListener(); DDS.DataReader reader = null; /* If you use Durable Reader State, you need to set up several properties. * In this example, we have modified them using a QoS XML profile. See * further details in USER_QOS_PROFILES.xml. */ if (drs == 1) { reader = subscriber.create_datareader_with_profile(topic, "persistence_example_Library", "durable_reader_state_Profile", reader_listener, DDS.StatusMask.STATUS_MASK_ALL); } else { reader = subscriber.create_datareader_with_profile(topic, "persistence_example_Library", "persistence_service_Profile", 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 = 4000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "hello_world subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }
static void subscribe(int domain_id, int sample_count, int turbo_mode_on) { System.String profile_name = null; System.String library_name = "batching_Library"; /* We pick the profile name if the turbo_mode is selected or not. * If Turbo_mode is not selected, the batching profile will be used. */ if (turbo_mode_on == 1) { profile_name = "turbo_mode_profile"; Console.WriteLine("Turbo Mode enable"); } else { profile_name = "batch_profile"; Console.WriteLine("Manual batching enable"); } // --- Create participant --- // /* To customize the participant QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DomainParticipant participant = DDS.DomainParticipantFactory.get_instance(). create_participant_with_profile( domain_id, library_name, profile_name, 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_with_profile( library_name, profile_name, 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 = batch_dataTypeSupport.get_type_name(); try { batch_dataTypeSupport.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 batch_data", 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 reader --- // /* Create a data reader listener */ batch_dataListener reader_listener = new batch_dataListener(); /* To customize the data reader QoS, use * the configuration file USER_QOS_PROFILES.xml */ DDS.DataReader reader = subscriber.create_datareader_with_profile( topic, library_name, profile_name, 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 = 4000; // milliseconds for (int count = 0; (sample_count == 0) || (count < sample_count); ++count) { Console.WriteLine( "batch_data subscriber sleeping for {0} sec...", receive_period / 1000); System.Threading.Thread.Sleep(receive_period); } // --- Shutdown --- // /* Delete all entities */ shutdown(participant); reader_listener = null; }