RTI Connext .Net APIs  Version 5.2.0
 All Classes Namespaces Functions Variables Enumerations Properties Groups Pages
HelloWorld_publisher.cpp

RTI Connext Publication Example

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

HelloWorld_publisher.cpp

/* HelloWorld_publisher.cpp
A publication of data of type HelloWorld
This file is derived from code automatically generated by the rtiddsgen
command:
rtiddsgen -language C++/CLI -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
HelloWorld_subscriber <domain_id> <sample_count>
(3) Start the publication on the same domain used for RTI Connext
with the command
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>:
HelloWorld_publisher <domain_id> <sample_count>
HelloWorld_subscriber <domain_id> <sample_count>
*/
#ifndef IMPORT_HelloWorld
/* If this example code is packaged into an assembly other than that
* containing the generated types themselves, no header inclusion is
* necessary. In that case, simply define IMPORT_HelloWorld.
*/
#include "HelloWorldSupport.h"
#endif
using namespace System;
public ref class HelloWorldPublisher {
public:
static void publish(int domain_id, int sample_count);
private:
static void shutdown(
DDS::DomainParticipant^ participant);
};
int main(array<System::String^>^ argv) {
int domain_id = 0;
if (argv->Length >= 1) {
domain_id = Int32::Parse(argv[0]);
}
int sample_count = 0; /* infinite loop */
if (argv->Length >= 2) {
sample_count = Int32::Parse(argv[1]);
}
/* Uncomment this to turn on additional logging
NDDS::ConfigLogger::get_instance()->set_verbosity_by_category(
NDDS::LogCategory::NDDS_CONFIG_LOG_CATEGORY_API,
NDDS::LogVerbosity::NDDS_CONFIG_LOG_VERBOSITY_STATUS_ALL);
*/
try {
HelloWorldPublisher::publish(
domain_id, sample_count);
}
catch(DDS::Exception^) {
return -1;
}
return 0;
}
void HelloWorldPublisher::publish(int domain_id, int sample_count) {
/* To customize participant QoS, use
DDS::DomainParticipantFactory::get_instance()->get_default_participant_qos() */
DDS::DomainParticipant^ participant =
domain_id,
nullptr /* listener */,
DDS::StatusMask::STATUS_MASK_NONE);
if (participant == nullptr) {
shutdown(participant);
throw gcnew ApplicationException("create_participant error");
}
/* To customize publisher QoS, use
participant->get_default_publisher_qos() */
DDS::Publisher^ publisher = participant->create_publisher(
nullptr /* listener */,
DDS::StatusMask::STATUS_MASK_NONE);
if (publisher == nullptr) {
shutdown(participant);
throw gcnew ApplicationException("create_publisher error");
}
/* Register type before creating topic */
System::String^ type_name = HelloWorldTypeSupport::get_type_name();
try {
HelloWorldTypeSupport::register_type(
participant, type_name);
} catch (DDS::Exception^ 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,
nullptr /* listener */,
DDS::StatusMask::STATUS_MASK_NONE);
if (topic == nullptr) {
shutdown(participant);
throw gcnew ApplicationException("create_topic error");
}
/* To customize data writer QoS, use
publisher->get_default_datawriter_qos() */
DDS::DataWriter^ writer = publisher->create_datawriter(
topic,
nullptr /* listener */,
DDS::StatusMask::STATUS_MASK_NONE);
if (writer == nullptr) {
shutdown(participant);
throw gcnew ApplicationException("create_datawriter error");
}
HelloWorldDataWriter^ HelloWorld_writer =
safe_cast<HelloWorldDataWriter^>(writer);
/* Create data sample for writing */
HelloWorld^ instance = HelloWorldTypeSupport::create_data();
if (instance == nullptr) {
shutdown(participant);
throw gcnew 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, 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);
}
*/
/* 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);
}
/* Delete all entities */
void HelloWorldPublisher::shutdown(
DDS::DomainParticipant^ participant) {
if (participant != nullptr) {
participant->delete_contained_entities();
}
/* 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. */
/*
DDS::DomainParticipantFactory::finalize_instance();
*/
}

RTI Connext .Net APIs Version 5.2.0 Copyright © Sun Jun 21 2015 Real-Time Innovations, Inc