20 package org.vortex.FACE;
23 import java.util.Collections;
24 import java.util.HashMap;
26 import java.util.logging.Level;
28 import org.omg.dds.core.AlreadyClosedException;
29 import org.omg.dds.core.IllegalOperationException;
30 import org.omg.dds.core.NotEnabledException;
31 import org.omg.dds.core.PreconditionNotMetException;
32 import org.omg.dds.core.ServiceEnvironment;
34 import FACE.CONNECTION_DIRECTION_TYPEHolder;
35 import FACE.MESSAGING_PATTERN_TYPE;
37 import FACE.RETURN_CODE_TYPEHolder;
38 import FACE.TRANSPORT_CONNECTION_STATUS_TYPEHolder;
41 private ServiceEnvironment env;
42 private Map<String, ConnectionDescription> connectionDescriptions;
43 private Map<Long, Connection<?>> connections;
49 RETURN_CODE_TYPEHolder return_code) {
51 ServiceEnvironment.IMPLEMENTATION_CLASS_NAME_PROPERTY,
52 "org.opensplice.dds.core.OsplServiceEnvironment");
53 this.env = ServiceEnvironment.createInstance(
TransportServices.class.getClassLoader());
54 this.connectionDescriptions = Collections
55 .synchronizedMap(
new HashMap<String, ConnectionDescription>());
56 this.connections = Collections
58 if (return_code == null) {
62 if (configuration == null) {
67 File f =
new File(configuration);
68 if(f.exists() && !f.isDirectory()) {
72 connectionDescriptions.put(connection.getName(), connection);
75 }
catch (Exception e) {
82 Logger.
getInstance().
log(
"Invalid argument configuration, configuration file (" + f.getAbsolutePath() +
") does not exists", Level.SEVERE);
89 String connection_name,
90 MESSAGING_PATTERN_TYPE pattern,
92 CONNECTION_DIRECTION_TYPEHolder connection_direction,
95 RETURN_CODE_TYPEHolder return_code) {
96 if (return_code == null) {
100 if(connection_name == null ) {
105 if(connection_id == null ) {
110 if (connection_direction == null) {
115 if (pattern != MESSAGING_PATTERN_TYPE.PUB_SUB) {
120 synchronized (this.connections) {
122 if (description == null) {
128 if (connection != null) {
130 connection_id.value = description.
getId();
131 connection_direction.value = description.
getDirection();
137 connection_id.value = description.
getId();
138 connection_direction.value = description.
getDirection();
140 this.connections.put(connection_id.value, connection);
143 }
catch (ClassNotFoundException e) {
147 +
"' for configured type_name could not be found. Please use fully qualified class name",
150 }
catch (Exception e) {
153 return_code.value = this.getFACEReturnCodeFromException(e);
190 RETURN_CODE_TYPEHolder return_code) {
191 if (return_code == null) {
195 synchronized (this.connections) {
196 Connection<?> connection = this.connections.remove(connection_id);
197 if (connection == null) {
198 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
199 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
204 return_code.value = RETURN_CODE_TYPE.NO_ERROR;
205 }
catch (Exception e) {
207 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
255 public <TYPE>
void Receive_Message(
long connection_id,
long timeout,
257 int message_size, RETURN_CODE_TYPEHolder return_code) {
258 if (return_code == null) {
262 if (transaction_id == null) {
266 if (message == null) {
270 synchronized (this.connections) {
272 if (connection == null) {
273 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
274 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
279 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
280 Logger.
getInstance().
log(
"Invalid connection direction for Receive_Message function", Level.SEVERE);
286 if (typedConnection == null) {
287 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
292 if (destConnection == null) {
293 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
297 message_size, return_code);
351 public <TYPE>
void Send_Message(
long connection_id,
long timeout,
353 RETURN_CODE_TYPEHolder return_code) {
354 if (return_code == null) {
358 if (transaction_id == null) {
360 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
363 if (message == null) {
365 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
368 synchronized (this.connections) {
371 if (connection == null) {
372 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
373 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
377 if (connection.
getDirection() ==
FACE.CONNECTION_DIRECTION_TYPE.DESTINATION) {
378 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
379 Logger.
getInstance().
log(
"Invalid connection direction for Send_Message function", Level.SEVERE);
385 if (typedConnection == null) {
386 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
391 if (srcConnection == null) {
392 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
395 return_code.value = srcConnection.
sendMessage(message.
value, timeout,transaction_id);
438 public <TYPE>
void Register_Callback(
442 int max_message_size,
443 RETURN_CODE_TYPEHolder return_code) {
444 if (return_code == null) {
448 if (data_callback == null) {
450 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
455 if (connection == null) {
456 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
457 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
461 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
462 Logger.
getInstance().
log(
"Invalid connection direction for Register_Callback function", Level.SEVERE);
468 if (typedConnection == null) {
469 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
475 if (destConnection == null) {
476 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
480 return_code.value = RETURN_CODE_TYPE.NO_ACTION;
488 public <TYPE>
void Unregister_Callback(
long connection_id,
489 RETURN_CODE_TYPEHolder return_code) {
490 if (return_code == null) {
496 if (connection == null) {
497 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
498 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
503 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
504 Logger.
getInstance().
log(
"Invalid connection direction for Unregister_Callback function", Level.SEVERE);
510 if (typedConnection == null) {
511 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
517 if (destConnection == null) {
518 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
537 TRANSPORT_CONNECTION_STATUS_TYPEHolder connection_status,
538 RETURN_CODE_TYPEHolder return_code) {
539 if (return_code == null) {
543 if (connection_name == null) {
545 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
548 if (connection_id == null) {
550 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
553 if (connection_status == null) {
555 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
558 synchronized (this.connections) {
559 Connection<?> connection = connections.get(connection_id.value);
561 if (connection == null) {
562 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id.value, Level.SEVERE);
563 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
567 connection_status.value = connection.
getStatus();
568 return_code.value = RETURN_CODE_TYPE.NO_ERROR;
573 private RETURN_CODE_TYPE getFACEReturnCodeFromException(Exception e) {
574 if (e instanceof AlreadyClosedException
575 || e instanceof java.util.concurrent.TimeoutException) {
576 return RETURN_CODE_TYPE.NO_ACTION;
577 }
else if (e instanceof UnsupportedOperationException) {
578 return RETURN_CODE_TYPE.NOT_AVAILABLE;
579 }
else if (e instanceof IllegalArgumentException) {
580 return RETURN_CODE_TYPE.INVALID_PARAM;
581 }
else if (e instanceof NotEnabledException
582 || e instanceof PreconditionNotMetException
583 || e instanceof IllegalOperationException) {
584 return RETURN_CODE_TYPE.INVALID_MODE;
586 return RETURN_CODE_TYPE.INVALID_PARAM;
void log(String message, Level level)
DestinationConnection< TYPE > asDestination()
void Create_Connection(String connection_name, MESSAGING_PATTERN_TYPE pattern, us.opengroup.FACE.LongHolder connection_id, CONNECTION_DIRECTION_TYPEHolder connection_direction, us.opengroup.FACE.IntHolder max_message_size, long timeout, RETURN_CODE_TYPEHolder return_code)
abstract CONNECTION_DIRECTION_TYPE getDirection()
RETURN_CODE_TYPE registerCallback(Read_CallbackHolder< TYPE > callback, int maxMessageSize)
static Logger getInstance()
TRANSPORT_CONNECTION_STATUS_TYPE getStatus()
static< TYPE > Connection< TYPE > getConnection(ConnectionDescription description, Class< TYPE > dataType)
SourceConnection< TYPE > asSource()
void receiveMessage(long timeout, us.opengroup.FACE.LongHolder transaction_id, Holder< TYPE > message, int message_size, RETURN_CODE_TYPEHolder return_code)
RETURN_CODE_TYPE unregisterCallback()
void Initialize(String configuration, RETURN_CODE_TYPEHolder return_code)
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.
Read_Callback< TYPE > getCallback()
void Destroy_Connection(long connection_id, RETURN_CODE_TYPEHolder return_code)
For DDS, TS shall keep track of the DomainParticipant and Topic variables for deletion.
CONNECTION_DIRECTION_TYPE getDirection()
void Get_Connection_Parameters(us.opengroup.FACE.StringHolder connection_name, us.opengroup.FACE.LongHolder connection_id, TRANSPORT_CONNECTION_STATUS_TYPEHolder connection_status, RETURN_CODE_TYPEHolder return_code)
HashSet< ConnectionDescription > getConfigurations()
ConnectionDescription getDescription()