RTI Connext Java API  Version 6.0.1
 All Classes Namespaces Functions Variables Groups Pages
HelloWorldSubscriber.java

RTI Connext Subscription Example

The unmodified subscription example generated by rtiddsgen.

HelloWorldSubscriber.java

/*
* (c) Copyright, Real-Time Innovations, 2012. All rights reserved.
* RTI grants Licensee a license to use, modify, compile, and create derivative
* works of the software solely for use with RTI Connext DDS. Licensee may
* redistribute copies of the software provided that all such copies are subject
* to this license. The software is provided "as is", with no warranty of any
* type, including any warranty for fitness for any purpose. RTI is under no
* obligation to maintain or support the software. RTI shall not be liable for
* any incidental or consequential damages arising out of the use or inability
* to use the software.
*/
/* HelloWorldSubscriber.java
A publication of data of type HelloWorld
This file is derived from code automatically generated by the rtiddsgen
command:
rtiddsgen -language java -example <arch> .idl
Example publication of type HelloWorld automatically generated by
'rtiddsgen' To test it, 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
java HelloWorldSubscriber <domain_id> <sample_count>
(3) Start the publication on the same domain used for RTI Connext with the command
java HelloWorldPublisher <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 publisher and subscriber programs, and can
add and remove them dynamically from the domain.
Example:
To run the example application on domain <domain_id>:
Ensure that $(NDDSHOME)/lib/<arch> is on the dynamic library path for
Java.
On UNIX systems:
add $(NDDSHOME)/lib/<arch> to the 'LD_LIBRARY_PATH' environment
variable
On Windows systems:
add %NDDSHOME%\lib<arch> to the 'Path' environment variable
Run the Java applications:
java -Djava.ext.dirs=$NDDSHOME/class HelloWorldPublisher <domain_id>
java -Djava.ext.dirs=$NDDSHOME/class HelloWorldSubscriber <domain_id>
*/
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import com.rti.dds.domain.*;
import com.rti.dds.infrastructure.*;
import com.rti.dds.subscription.*;
import com.rti.dds.topic.*;
import com.rti.ndds.config.*;
// ===========================================================================
public class HelloWorldSubscriber {
// -----------------------------------------------------------------------
// Public Methods
// -----------------------------------------------------------------------
public static void main(String[] args) {
// --- Get domain ID --- //
int domainId = 0;
if (args.length >= 1) {
domainId = Integer.valueOf(args[0]).intValue();
}
// -- Get max loop count; 0 means infinite loop --- //
int sampleCount = 0;
if (args.length >= 2) {
sampleCount = Integer.valueOf(args[1]).intValue();
}
/* Uncomment this to turn on additional logging
Logger.get_instance().set_verbosity_by_category(
LogCategory.NDDS_CONFIG_LOG_CATEGORY_API,
LogVerbosity.NDDS_CONFIG_LOG_VERBOSITY_STATUS_ALL);
*/
// --- Run --- //
subscriberMain(domainId, sampleCount);
}
// -----------------------------------------------------------------------
// Private Methods
// -----------------------------------------------------------------------
// --- Constructors: -----------------------------------------------------
private HelloWorldSubscriber() {
super();
}
// -----------------------------------------------------------------------
private static void subscriberMain(int domainId, int sampleCount) {
DomainParticipant participant = null;
Subscriber subscriber = null;
Topic topic = null;
DataReaderListener listener = null;
HelloWorldDataReader reader = null;
try {
// --- Create participant --- //
/* To customize participant QoS, use
the configuration file
USER_QOS_PROFILES.xml */
participant = DomainParticipantFactory.TheParticipantFactory.
create_participant(
domainId, DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT,
null /* listener */, StatusKind.STATUS_MASK_NONE);
if (participant == null) {
System.err.println("create_participant error\n");
return;
}
// --- Create subscriber --- //
/* To customize subscriber QoS, use
the configuration file USER_QOS_PROFILES.xml */
subscriber = participant.create_subscriber(
DomainParticipant.SUBSCRIBER_QOS_DEFAULT, null /* listener */,
StatusKind.STATUS_MASK_NONE);
if (subscriber == null) {
System.err.println("create_subscriber error\n");
return;
}
// --- Create topic --- //
/* Register type before creating topic */
String typeName = HelloWorldTypeSupport.get_type_name();
HelloWorldTypeSupport.register_type(participant, typeName);
/* To customize topic QoS, use
the configuration file USER_QOS_PROFILES.xml */
topic = participant.create_topic(
"Example HelloWorld",
typeName, DomainParticipant.TOPIC_QOS_DEFAULT,
null /* listener */, StatusKind.STATUS_MASK_NONE);
if (topic == null) {
System.err.println("create_topic error\n");
return;
}
// --- Create reader --- //
listener = new HelloWorldListener();
/* To customize data reader QoS, use
the configuration file USER_QOS_PROFILES.xml */
reader = (HelloWorldDataReader)
subscriber.create_datareader(
topic, Subscriber.DATAREADER_QOS_DEFAULT, listener,
StatusKind.STATUS_MASK_ALL);
if (reader == null) {
System.err.println("create_datareader error\n");
return;
}
// --- Wait for data --- //
final long receivePeriodSec = 4;
for (int count = 0;
(sampleCount == 0) || (count < sampleCount);
++count) {
System.out.println("HelloWorld subscriber sleeping for "
+ receivePeriodSec + " sec...");
try {
Thread.sleep(receivePeriodSec * 1000); // in millisec
} catch (InterruptedException ix) {
System.err.println("INTERRUPTED");
break;
}
}
} finally {
// --- Shutdown --- //
if(participant != null) {
participant.delete_contained_entities();
DomainParticipantFactory.TheParticipantFactory.
delete_participant(participant);
}
/* RTI Data Distribution Service provides the finalize_instance()
method for users who want to release memory used by the
participant factory singleton. Uncomment the following block of
code for clean destruction of the participant factory
singleton. */
//DomainParticipantFactory.finalize_instance();
}
}
// -----------------------------------------------------------------------
// Private Types
// -----------------------------------------------------------------------
// =======================================================================
private static class HelloWorldListener extends DataReaderAdapter {
HelloWorldSeq _dataSeq = new HelloWorldSeq();
SampleInfoSeq _infoSeq = new SampleInfoSeq();
public void on_data_available(DataReader reader) {
HelloWorldDataReader HelloWorldReader =
(HelloWorldDataReader)reader;
try {
HelloWorldReader.take(
_dataSeq, _infoSeq,
ResourceLimitsQosPolicy.LENGTH_UNLIMITED,
SampleStateKind.ANY_SAMPLE_STATE,
ViewStateKind.ANY_VIEW_STATE,
InstanceStateKind.ANY_INSTANCE_STATE);
for(int i = 0; i < _dataSeq.size(); ++i) {
SampleInfo info = (SampleInfo)_infoSeq.get(i);
if (info.valid_data) {
System.out.println(
((HelloWorld)_dataSeq.get(i)).toString("Received",0));
}
}
} catch (RETCODE_NO_DATA noData) {
// No data to process
} finally {
HelloWorldReader.return_loan(_dataSeq, _infoSeq);
}
}
}
}

RTI Connext Java API Version 6.0.1 Copyright © Sat Nov 23 2019 Real-Time Innovations, Inc