20 package org.vortex.FACE;
23 import java.util.concurrent.TimeUnit;
24 import java.util.concurrent.TimeoutException;
25 import java.util.concurrent.atomic.AtomicLong;
26 import java.util.logging.Level;
28 import org.omg.dds.core.AlreadyClosedException;
29 import org.omg.dds.core.policy.PolicyFactory;
30 import org.omg.dds.core.policy.Reliability;
31 import org.omg.dds.pub.DataWriter;
32 import org.omg.dds.pub.DataWriterQos;
33 import org.omg.dds.pub.Publisher;
34 import org.omg.dds.pub.PublisherQos;
36 import FACE.CONNECTION_DIRECTION_TYPE;
38 import FACE.VALIDITY_TYPE;
41 private Publisher publisher = null;
42 private DataWriter<TYPE> dataWriter = null;
43 private final AtomicLong transactionid;
46 Class<TYPE> dataType) {
47 super(description,dataType);
48 this.transactionid =
new AtomicLong(0);
49 this.setupPublisher();
50 this.setupDataWriter();
53 private void setupPublisher() {
58 qos.withPolicy(PolicyFactory
62 Set<String> names = qos.getPartition().getName();
64 if (names.size() == 1 && names.contains(
"")) {
65 qos = qos.withPolicy(qos.getPartition().withName(
71 }
catch (AlreadyClosedException e) {
73 }
catch (Exception exc) {
80 private void setupDataWriter() {
85 qos = this.publisher.getDefaultDataWriterQos();
88 this.dataWriter = this.publisher.createDataWriter(this.
getTopic());
90 }
catch (AlreadyClosedException e) {
92 }
catch (Exception exc) {
101 return CONNECTION_DIRECTION_TYPE.SOURCE;
107 if (this.dataWriter.getQos().getReliability().getKind() == Reliability.Kind.RELIABLE) {
108 long maxBlockingTime = this.dataWriter.getQos()
109 .getReliability().getMaxBlockingTime()
110 .getDuration(TimeUnit.NANOSECONDS);
112 if (timeout > maxBlockingTime) {
114 "Supplied time-out > DataWriterQos.reliability.max_blocking_time (" 115 + timeout +
" > " + maxBlockingTime +
").",
119 return RETURN_CODE_TYPE.INVALID_PARAM;
123 this.dataWriter.write(instanceData);
124 transaction_id.value = this.transactionid.incrementAndGet();
126 }
catch (AlreadyClosedException e) {
128 }
catch (TimeoutException e) {
131 return RETURN_CODE_TYPE.TIMED_OUT;
133 }
catch (AlreadyClosedException e) {
135 }
catch (Exception exc) {
139 return RETURN_CODE_TYPE.CONNECTION_CLOSED;
142 return RETURN_CODE_TYPE.NO_ERROR;
void log(String message, Level level)
DomainParticipant getParticipant()
CONNECTION_DIRECTION_TYPE getDirection()
SourceConnection(ConnectionDescription description, Class< TYPE > dataType)
static Logger getInstance()
void setLastMessageValidity(VALIDITY_TYPE lastMessageValidity)
RETURN_CODE_TYPE sendMessage(TYPE instanceData, long timeout, us.opengroup.FACE.LongHolder transaction_id)
This is a typed class which will be generated by idlpp.
PublisherQos getPublisherQos()
ConnectionDescription getDescription()
DataWriterQos getDataWriterQos()