import java.util.Objects;
import com.rti.dds.domain.DomainParticipant;
import com.rti.dds.domain.DomainParticipantFactory;
import com.rti.dds.infrastructure.ConditionSeq;
import com.rti.dds.infrastructure.Duration_t;
import com.rti.dds.infrastructure.RETCODE_NO_DATA;
import com.rti.dds.infrastructure.RETCODE_TIMEOUT;
import com.rti.dds.infrastructure.ResourceLimitsQosPolicy;
import com.rti.dds.infrastructure.StatusKind;
import com.rti.dds.infrastructure.WaitSet;
import com.rti.dds.subscription.InstanceStateKind;
import com.rti.dds.subscription.ReadCondition;
import com.rti.dds.subscription.SampleInfo;
import com.rti.dds.subscription.SampleInfoSeq;
import com.rti.dds.subscription.SampleStateKind;
import com.rti.dds.subscription.Subscriber;
import com.rti.dds.subscription.ViewStateKind;
import com.rti.dds.topic.Topic;
public class HelloWorldSubscriber extends Application implements AutoCloseable {
private DomainParticipant participant = null;
private HelloWorldDataReader reader = null;
private final HelloWorldSeq dataSeq = new HelloWorldSeq();
private final SampleInfoSeq infoSeq = new SampleInfoSeq();
private int processData() {
int samplesRead = 0;
try {
reader.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 = infoSeq.get(i);
if (info.valid_data) {
System.out.println("Received" + dataSeq.get(i));
}
samplesRead++;
}
} catch (RETCODE_NO_DATA noData) {
} finally {
reader.return_loan(dataSeq, infoSeq);
}
return samplesRead;
}
private void runApplication() {
participant = Objects.requireNonNull(
DomainParticipantFactory.get_instance().create_participant(
getDomainId(),
DomainParticipantFactory.PARTICIPANT_QOS_DEFAULT,
null,
StatusKind.STATUS_MASK_NONE));
Subscriber subscriber = Objects.requireNonNull(
participant.create_subscriber(
DomainParticipant.SUBSCRIBER_QOS_DEFAULT,
null,
StatusKind.STATUS_MASK_NONE));
String typeName = HelloWorldTypeSupport.get_type_name();
HelloWorldTypeSupport.register_type(participant, typeName);
Topic topic = Objects.requireNonNull(
participant.create_topic(
"Example HelloWorld",
typeName,
DomainParticipant.TOPIC_QOS_DEFAULT,
null,
StatusKind.STATUS_MASK_NONE));
reader = (HelloWorldDataReader) Objects.requireNonNull(
subscriber.create_datareader(
topic,
Subscriber.DATAREADER_QOS_DEFAULT,
null,
StatusKind.STATUS_MASK_NONE));
ReadCondition condition = reader.create_readcondition(
SampleStateKind.ANY_SAMPLE_STATE,
ViewStateKind.ANY_VIEW_STATE,
InstanceStateKind.ANY_INSTANCE_STATE);
WaitSet waitset = new WaitSet();
waitset.attach_condition(condition);
final Duration_t waitTimeout = new Duration_t(1, 0);
int samplesRead = 0;
ConditionSeq activeConditions = new ConditionSeq();
while (!isShutdownRequested() && samplesRead < getMaxSampleCount()) {
try {
waitset.wait(activeConditions, waitTimeout);
samplesRead += processData();
} catch (RETCODE_TIMEOUT timeout) {
System.out.printf("No data after %d seconds.%n", waitTimeout.sec);
}
}
}
@Override
public void close() {
if (participant != null) {
participant.delete_contained_entities();
DomainParticipantFactory.get_instance()
.delete_participant(participant);
}
}
public static void main(String[] args) {
try (HelloWorldSubscriber subscriberApplication = new HelloWorldSubscriber()) {
subscriberApplication.parseArguments(args);
subscriberApplication.addShutdownHook();
subscriberApplication.runApplication();
}
DomainParticipantFactory.finalize_instance();
}
}