This example shows how to write data from a real-time thread. Notice that it is not necessary to use the RTI DDS RTSJ configuration APIs in order to write data from a real-time thread that is under the direct control of the application.
package com.rti.ndds.rtsj.example.nodestatus;
import javax.realtime.ImmortalMemory;
import javax.realtime.MemoryArea;
import javax.realtime.MemoryParameters;
import javax.realtime.RealtimeThread;
import com.rti.dds.domain.DomainParticipant;
import com.rti.dds.domain.DomainParticipantFactory;
import com.rti.dds.infrastructure.InstanceHandle_t;
import com.rti.dds.infrastructure.StatusKind;
import com.rti.dds.publication.Publisher;
import com.rti.dds.topic.Topic;
public class NodeStatusPublisher {
public static void main(String[] args) {
int domainId = 0;
if (args.length >= 1) {
domainId = Integer.valueOf(args[0]).intValue();
}
int sampleCount = 0;
if (args.length >= 2) {
sampleCount = Integer.valueOf(args[1]).intValue();
}
final int finalDomainId = domainId;
final int finalSampleCount = sampleCount;
MemoryArea memArea = ImmortalMemory.instance();
MemoryParameters memoryParameters = new MemoryParameters(
1048576, 4 * 1048576);
Thread thread = new RealtimeThread(
null, null, memoryParameters, memArea, null,
new Runnable() {
public void run() {
publisherMain(finalDomainId, finalSampleCount);
}
}
);
thread.start();
}
private NodeStatusPublisher() {
super();
}
private static void publisherMain(int domainId, int sampleCount) {
DomainParticipant participant = null;
try {
participant = DomainParticipantFactory.TheParticipantFactory.
create_participant(
domainId, DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT,
null , StatusKind.STATUS_MASK_NONE);
Publisher publisher = participant.create_publisher(
DomainParticipant.PUBLISHER_QOS_DEFAULT, null ,
StatusKind.STATUS_MASK_NONE);
String typeName = NodeStatusTypeSupport.get_type_name();
NodeStatusTypeSupport.register_type(participant, typeName);
Topic topic = participant.create_topic(
"Example NodeStatus",
typeName, DomainParticipant.TOPIC_QOS_DEFAULT,
null , StatusKind.STATUS_MASK_NONE);
NodeStatusDataWriter writer = (NodeStatusDataWriter)
publisher.create_datawriter(
topic, Publisher.DATAWRITER_QOS_DEFAULT,
null , StatusKind.STATUS_MASK_NONE);
NodeStatus instance = new NodeStatus();
InstanceHandle_t instance_handle = InstanceHandle_t.HANDLE_NIL;
final long sendPeriodMillis = 16;
for (int count = 0;
(sampleCount == 0) || (count < sampleCount);
++count) {
if (count%1024 == 0)
System.out.println("Writing NodeStatus, count " + count);
writer.write(instance, InstanceHandle_t.HANDLE_NIL);
try {
Thread.sleep(sendPeriodMillis);
} catch (InterruptedException ix) {
System.err.println("INTERRUPTED");
break;
}
}
} finally {
if(participant != null) {
participant.delete_contained_entities();
DomainParticipantFactory.TheParticipantFactory.
delete_participant(participant);
}
}
}
}