-//
-// Copyright (c) 2013 Ford Motor Company
-//
-package com.smartdevicelink.syncConnection;
-
-import com.smartdevicelink.exception.SmartDeviceLinkException;
-import com.smartdevicelink.protocol.AbstractProtocol;
-import com.smartdevicelink.protocol.IProtocolListener;
-import com.smartdevicelink.protocol.ProtocolMessage;
-import com.smartdevicelink.protocol.SmartDeviceLinkProtocol;
-import com.smartdevicelink.protocol.enums.SessionType;
-import com.smartdevicelink.transport.BTTransport;
-import com.smartdevicelink.transport.BaseTransportConfig;
-import com.smartdevicelink.transport.ITransportListener;
-import com.smartdevicelink.transport.SmartDeviceLinkTransport;
-import com.smartdevicelink.transport.TCPTransport;
-import com.smartdevicelink.transport.TCPTransportConfig;
-import com.smartdevicelink.transport.TransportType;
-
-public class SmartDeviceLinkConnection implements IProtocolListener, ITransportListener {
-
- SmartDeviceLinkTransport _transport = null;
- AbstractProtocol _protocol = null;
- ISmartDeviceLinkConnectionListener _connectionListener = null;
-
- // Thread safety locks
- Object TRANSPORT_REFERENCE_LOCK = new Object();
- Object PROTOCOL_REFERENCE_LOCK = new Object();
-
- public SmartDeviceLinkConnection(ISmartDeviceLinkConnectionListener listener, BaseTransportConfig transportConfig) {
- _connectionListener = listener;
-
- // Initialize the transport
- synchronized(TRANSPORT_REFERENCE_LOCK) {
- // Ensure transport is null
- if (_transport != null) {
- if (_transport.getIsConnected()) {
- _transport.disconnect();
- }
- _transport = null;
- }
-
- if (transportConfig.getTransportType() == TransportType.BLUETOOTH)
- {
- _transport = new BTTransport(this);
- }
- else if (transportConfig.getTransportType() == TransportType.TCP)
- {
- _transport = new TCPTransport((TCPTransportConfig) transportConfig, this);
- }
- }
-
- // Initialize the protocol
- synchronized(PROTOCOL_REFERENCE_LOCK) {
- // Ensure protocol is null
- if (_protocol != null) {
- _protocol = null;
- }
-
- _protocol = new SmartDeviceLinkProtocol(this);
- }
- }
-
- public void closeConnection(byte rpcSessionID) {
- synchronized(PROTOCOL_REFERENCE_LOCK) {
- if (_protocol != null) {
- // If transport is still connected, sent EndProtocolSessionMessage
- if (_transport != null && _transport.getIsConnected()) {
- _protocol.EndProtocolSession(SessionType.RPC, rpcSessionID);
- }
- _protocol = null;
- } // end-if
- }
-
- synchronized (TRANSPORT_REFERENCE_LOCK) {
- if (_transport != null) {
- _transport.disconnect();
- }
- _transport = null;
- }
- }
-
- public void startTransport() throws SmartDeviceLinkException {
- _transport.openConnection();
- }
-
- public Boolean getIsConnected() {
-
- // If _transport is null, then it can't be connected
- if (_transport == null) {
- return false;
- }
-
- return _transport.getIsConnected();
- }
-
- public void sendMessage(ProtocolMessage msg) {
- _protocol.SendMessage(msg);
- }
-
- @Override
- public void onTransportBytesReceived(byte[] receivedBytes,
- int receivedBytesLength) {
- // Send bytes to protocol to be interpreted
- synchronized(PROTOCOL_REFERENCE_LOCK) {
- if (_protocol != null) {
- _protocol.HandleReceivedBytes(receivedBytes, receivedBytesLength);
- }
- }
- }
-
- @Override
- public void onTransportConnected() {
- synchronized(PROTOCOL_REFERENCE_LOCK){
- if(_protocol != null){
- _protocol.StartProtocolSession(SessionType.RPC);
- }
- }
- }
-
- @Override
- public void onTransportDisconnected(String info) {
- // Pass directly to connection listener
- _connectionListener.onTransportDisconnected(info);
- }
-
- @Override
- public void onTransportError(String info, Exception e) {
- // Pass directly to connection listener
- _connectionListener.onTransportError(info, e);
- }
-
- @Override
- public void onProtocolMessageBytesToSend(byte[] msgBytes, int offset,
- int length) {
- // Protocol has packaged bytes to send, pass to transport for transmission
- synchronized(TRANSPORT_REFERENCE_LOCK) {
- if (_transport != null) {
- _transport.sendBytes(msgBytes, offset, length);
- }
- }
- }
-
- @Override
- public void onProtocolMessageReceived(ProtocolMessage msg) {
- _connectionListener.onProtocolMessageReceived(msg);
- }
-
- @Override
- public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
- _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
- }
-
- @Override
- public void onProtocolSessionEnded(SessionType sessionType, byte sessionID,
- String correlationID) {
- _connectionListener.onProtocolSessionEnded(sessionType, sessionID, correlationID);
- }
-
- @Override
- public void onProtocolError(String info, Exception e) {
- _connectionListener.onProtocolError(info, e);
- }
-
- public TransportType getCurrentTransportType() {
- return _transport.getTransportType();
- }
-}
+package com.smartdevicelink.smartDeviceLinkConnection;\r
+\r
+\r
+import com.smartdevicelink.exception.SmartDeviceLinkException;\r
+import com.smartdevicelink.protocol.AbstractProtocol;\r
+import com.smartdevicelink.protocol.IProtocolListener;\r
+import com.smartdevicelink.protocol.ProtocolMessage;\r
+import com.smartdevicelink.protocol.SmartDeviceLinkProtocol;\r
+import com.smartdevicelink.protocol.enums.SessionType;\r
+import com.smartdevicelink.transport.*;\r
+\r
+public class smartDeviceLinkConnection implements IProtocolListener, ITransportListener {\r
+\r
+ SmartDeviceLinkTransport _transport = null;\r
+ AbstractProtocol _protocol = null;\r
+ IsmartDeviceLinkConnectionListener _connectionListener = null;\r
+\r
+ // Thread safety locks\r
+ Object TRANSPORT_REFERENCE_LOCK = new Object();\r
+ Object PROTOCOL_REFERENCE_LOCK = new Object();\r
+ \r
+ /**\r
+ * Constructor.\r
+ * \r
+ * @param listener SmartDeviceLink connection listener.\r
+ * @param transportConfig Transport configuration for this connection.\r
+ */\r
+ public smartDeviceLinkConnection(IsmartDeviceLinkConnectionListener listener, BaseTransportConfig transportConfig) {\r
+ _connectionListener = listener;\r
+ \r
+ // Initialize the transport\r
+ synchronized(TRANSPORT_REFERENCE_LOCK) {\r
+ // Ensure transport is null\r
+ if (_transport != null) {\r
+ if (_transport.getIsConnected()) {\r
+ _transport.disconnect();\r
+ }\r
+ _transport = null;\r
+ }\r
+ \r
+ if (transportConfig.getTransportType() == TransportType.BLUETOOTH)\r
+ {\r
+ _transport = new BTTransport(this); \r
+ }\r
+ else if (transportConfig.getTransportType() == TransportType.TCP)\r
+ {\r
+ _transport = new TCPTransport((TCPTransportConfig) transportConfig, this);\r
+ }\r
+ }\r
+ \r
+ // Initialize the protocol\r
+ synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+ // Ensure protocol is null\r
+ if (_protocol != null) {\r
+ _protocol = null;\r
+ }\r
+ \r
+ _protocol = new SmartDeviceLinkProtocol(this);\r
+ }\r
+ }\r
+ \r
+ public AbstractProtocol getSmartDeviceLinkProtocolProtocol(){\r
+ return _protocol;\r
+ }\r
+ \r
+ public void closeConnection(byte rpcSessionID) {\r
+ synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+ if (_protocol != null) {\r
+ // If transport is still connected, sent EndProtocolSessionMessage\r
+ if (_transport != null && _transport.getIsConnected()) {\r
+ _protocol.EndProtocolSession(SessionType.RPC, rpcSessionID);\r
+ }\r
+ _protocol = null;\r
+ } // end-if\r
+ }\r
+ \r
+ synchronized (TRANSPORT_REFERENCE_LOCK) {\r
+ if (_transport != null) {\r
+ _transport.disconnect();\r
+ }\r
+ _transport = null;\r
+ }\r
+ }\r
+ \r
+ public void startTransport() throws SmartDeviceLinkException {\r
+ _transport.openConnection();\r
+ }\r
+ \r
+ public Boolean getIsConnected() {\r
+ \r
+ // If _transport is null, then it can't be connected\r
+ if (_transport == null) {\r
+ return false;\r
+ }\r
+ \r
+ return _transport.getIsConnected();\r
+ }\r
+ \r
+ public void sendMessage(ProtocolMessage msg) {\r
+ _protocol.SendMessage(msg);\r
+ }\r
+ \r
+ @Override\r
+ public void onTransportBytesReceived(byte[] receivedBytes,\r
+ int receivedBytesLength) {\r
+ // Send bytes to protocol to be interpreted \r
+ synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+ if (_protocol != null) {\r
+ _protocol.HandleReceivedBytes(receivedBytes, receivedBytesLength);\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onTransportConnected() {\r
+ synchronized(PROTOCOL_REFERENCE_LOCK){\r
+ if(_protocol != null){\r
+ _protocol.StartProtocolSession(SessionType.RPC); \r
+ }\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void onTransportDisconnected(String info) {\r
+ // Pass directly to connection listener\r
+ _connectionListener.onTransportDisconnected(info);\r
+ }\r
+\r
+ @Override\r
+ public void onTransportError(String info, Exception e) {\r
+ // Pass directly to connection listener\r
+ _connectionListener.onTransportError(info, e);\r
+ }\r
+\r
+ @Override\r
+ public void onProtocolMessageBytesToSend(byte[] msgBytes, int offset,\r
+ int length) {\r
+ // Protocol has packaged bytes to send, pass to transport for transmission \r
+ synchronized(TRANSPORT_REFERENCE_LOCK) {\r
+ if (_transport != null) {\r
+ _transport.sendBytes(msgBytes, offset, length);\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onProtocolMessageReceived(ProtocolMessage msg) {\r
+ _connectionListener.onProtocolMessageReceived(msg);\r
+ }\r
+\r
+ @Override\r
+ public void onProtocolSessionStarted(SessionType sessionType,\r
+ byte sessionID, byte version, String correlationID) {\r
+ _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);\r
+ }\r
+\r
+ @Override\r
+ public void onProtocolSessionEnded(SessionType sessionType, byte sessionID,\r
+ String correlationID) {\r
+ _connectionListener.onProtocolSessionEnded(sessionType, sessionID, correlationID);\r
+ }\r
+\r
+ @Override\r
+ public void onProtocolError(String info, Exception e) {\r
+ _connectionListener.onProtocolError(info, e);\r
+ }\r
+ \r
+ /**\r
+ * Gets type of transport currently used by this connection.\r
+ * \r
+ * @return One of TransportType enumeration values.\r
+ * \r
+ * @see TransportType\r
+ */\r
+ public TransportType getCurrentTransportType() {\r
+ return _transport.getTransportType();\r
+ }\r
+}\r