RTI Connext .Net APIs  Version 6.0.0
HelloWorld_publisher.cs

RTI Connext Publication Example

The publication example generated by rtiddsgen. The example has been modified slightly to update the sample value.

HelloWorld_publisher.cs

/* HelloWorld_publisher.cs
A publication of data of type HelloWorld
This file is derived from code automatically generated by the rtiddsgen
command:
rtiddsgen -language C# -example <arch> HelloWorld.idl
Example publication of type HelloWorld automatically generated by
'rtiddsgen'. To test them follow these steps:
(1) Compile this file and the example subscription.
(2) Start the subscription on the same domain used for RTI Connext
with the command
objs<arch>\HelloWorld_subscriber <domain_id> <sample_count>
(3) Start the publication on the same domain used for RTI Connext
with the command
objs<arch>\HelloWorld_publisher <domain_id> <sample_count>
(4) [Optional] Specify the list of discovery initial peers and
multicast receive addresses via an environment variable or a file
(in the current working directory) called NDDS_DISCOVERY_PEERS.
You can run any number of publishers and subscribers programs, and can
add and remove them dynamically from the domain.
Example:
To run the example application on domain <domain_id>:
bin<Debug|Release>\HelloWorld_publisher <domain_id> <sample_count>
bin<Debug|Release>\HelloWorld_subscriber <domain_id> <sample_count>
modification history
------------ -------
*/
using System;
using System.Collections.Generic;
using System.Text;
public class HelloWorldPublisher {
public static void Main(string[] args) {
// --- Get domain ID --- //
int domain_id = 0;
if (args.Length >= 1) {
domain_id = Int32.Parse(args[0]);
}
// --- Get max loop count; 0 means infinite loop --- //
int sample_count = 0;
if (args.Length >= 2) {
sample_count = Int32.Parse(args[1]);
}
/* Uncomment this to turn on additional logging
NDDS.ConfigLogger.get_instance().set_verbosity_by_category(
NDDS.LogCategory.CONFIG_LOG_CATEGORY_API,
NDDS.LogVerbosity.CONFIG_LOG_VERBOSITY_STATUS_ALL);
*/
// --- Run --- //
try {
HelloWorldPublisher.publish(
domain_id, sample_count);
}
catch(DDS.Exception)
{
Console.WriteLine("error in publisher");
}
}
static void publish(int domain_id, int sample_count) {
// --- Create participant --- //
/* To customize participant QoS, use
DDS.DomainParticipantFactory.get_instance().
get_default_participant_qos() */
DDS.DomainParticipant participant =
domain_id,
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
participant.get_default_publisher_qos() */
DDS.Publisher publisher = participant.create_publisher(
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 = HelloWorldTypeSupport.get_type_name();
try {
HelloWorldTypeSupport.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
participant.get_default_topic_qos() */
DDS.Topic topic = participant.create_topic(
"Example HelloWorld",
type_name,
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
publisher.get_default_datawriter_qos() */
DDS.DataWriter writer = publisher.create_datawriter(
topic,
null /* listener */,
DDS.StatusMask.STATUS_MASK_NONE);
if (writer == null) {
shutdown(participant);
throw new ApplicationException("create_datawriter error");
}
HelloWorldDataWriter HelloWorld_writer =
(HelloWorldDataWriter)writer;
// --- Write --- //
/* Create data sample for writing */
HelloWorld instance = HelloWorldTypeSupport.create_data();
if (instance == null) {
shutdown(participant);
throw new ApplicationException(
"HelloWorldTypeSupport.create_data error");
}
/* For data type that has key, if the same instance is going to be
written multiple times, initialize the key here
and register the keyed instance prior to writing */
/*
instance_handle = HelloWorld_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 HelloWorld, count {0}", count);
/* Modify the data to be sent here */
instance.msg = "Hello World! (" + count + ")";
try {
HelloWorld_writer.write(instance, ref instance_handle);
}
catch(DDS.Exception e) {
Console.WriteLine("write error {0}", e);
}
System.Threading.Thread.Sleep(send_period);
}
/*
try {
HelloWorld_writer.unregister_instance(
instance, instance_handle);
} catch(DDS.Exception e) {
Console.WriteLine("unregister instance error: {0}", e);
}
*/
// --- Shutdown --- //
/* Delete data sample */
try {
HelloWorldTypeSupport.delete_data(instance);
} catch(DDS.Exception e) {
Console.WriteLine(
"HelloWorldTypeSupport.delete_data error: {0}", e);
}
/* Delete all entities */
shutdown(participant);
}
static void shutdown(
DDS.DomainParticipant participant) {
/* Delete all entities */
if (participant != null) {
participant.delete_contained_entities();
ref participant);
}
/* RTI Connext provides finalize_instance() method on
domain participant factory for people who want to release memory
used by the participant factory. Uncomment the following block of
code for clean destruction of the singleton. */
/*
try {
DDS.DomainParticipantFactory.finalize_instance();
} catch (DDS.Exception e) {
Console.WriteLine("finalize_instance error: {0}", e);
throw e;
}
*/
}
}

RTI Connext .Net APIs Version 6.0.0 Copyright © Sun Mar 3 2019 Real-Time Innovations, Inc