diff options
author | Joey Grover <joeygrover@gmail.com> | 2019-07-12 14:51:50 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2019-07-12 14:51:50 -0400 |
commit | 9007f05b97df1b768d73ef7bd3e270aeae471172 (patch) | |
tree | 2a6b9762874878064f714c27a19708fa57dbea03 | |
parent | 2d9613325d6c6095d08af3d7c2abe8e99b251d61 (diff) | |
download | sdl_android-feature/tcp_transportManager.tar.gz |
Add ability to use TCP transport with new layersfeature/tcp_transportManager
3 files changed, 50 insertions, 13 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession2.java b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession2.java index 457bd9a46..e70d5f708 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession2.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession2.java @@ -45,6 +45,7 @@ import com.smartdevicelink.protocol.heartbeat.IHeartbeatMonitor; import com.smartdevicelink.proxy.interfaces.ISdlServiceListener; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.MultiplexTransportConfig; +import com.smartdevicelink.transport.TCPTransportConfig; import com.smartdevicelink.transport.enums.TransportType; import com.smartdevicelink.util.MediaStreamingStatus; import com.smartdevicelink.util.Version; @@ -82,8 +83,14 @@ public class SdlSession2 extends SdlSession implements ISdlProtocol{ } + public SdlSession2(ISdlConnectionListener listener, TCPTransportConfig config){ //TODO is it better to have two constructors or make it take BaseTransportConfig? + this.transportConfig = config; + this.sessionListener = listener; + this.sdlProtocol = new SdlProtocol(this,config); + } + boolean isAudioRequirementMet(){ - if(mediaStreamingStatus == null){ + if(mediaStreamingStatus == null && contextWeakReference!= null && contextWeakReference.get() != null){ mediaStreamingStatus = new MediaStreamingStatus(contextWeakReference.get(), new MediaStreamingStatus.Callback() { @Override public void onAudioNoLongerAvailable() { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java index c06709b52..de5a56072 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java @@ -32,11 +32,27 @@ package com.smartdevicelink.protocol; +import android.os.Handler; +import android.os.Message; import android.support.annotation.NonNull; +import android.util.Log; import com.smartdevicelink.protocol.enums.SessionType; +import com.smartdevicelink.transport.BaseTransportConfig; +import com.smartdevicelink.transport.MultiplexBaseTransport; +import com.smartdevicelink.transport.MultiplexTcpTransport; import com.smartdevicelink.transport.MultiplexTransportConfig; +import com.smartdevicelink.transport.SdlRouterService; +import com.smartdevicelink.transport.TCPTransport; +import com.smartdevicelink.transport.TCPTransportConfig; +import com.smartdevicelink.transport.TCPTransportManager; import com.smartdevicelink.transport.TransportManager; +import com.smartdevicelink.transport.TransportManagerBase; +import com.smartdevicelink.transport.enums.TransportType; +import com.smartdevicelink.transport.utl.TransportRecord; + +import java.lang.ref.WeakReference; +import java.util.Collections; @SuppressWarnings("WeakerAccess") @@ -54,17 +70,27 @@ public class SdlProtocol extends SdlProtocolBase { } + public SdlProtocol(@NonNull ISdlProtocol iSdlProtocol, @NonNull TCPTransportConfig config) { + super(iSdlProtocol,config); + this.requestedPrimaryTransports = Collections.singletonList(TransportType.TCP); + this.requestedSecondaryTransports = null; + this.requiresHighBandwidth =false; + this.setTransportManager(new TCPTransportManager(config,transportEventListener)); + this.requestedPrimaryTransports = Collections.singletonList(TransportType.TCP); + } + /** * If there was a TransportListener attached to the supplied multiplex config, this method will * call the onTransportEvent method. */ @Override void notifyDevTransportListener (){ - MultiplexTransportConfig transportConfig = (MultiplexTransportConfig)this.transportConfig; - if(transportConfig.getTransportListener() != null && transportManager != null) { - transportConfig.getTransportListener().onTransportEvent(transportManager.getConnectedTransports(), isTransportForServiceAvailable(SessionType.PCM),isTransportForServiceAvailable(SessionType.NAV)); + if(TransportType.MULTIPLEX.equals(transportConfig.getTransportType() )) { + MultiplexTransportConfig transportConfig = (MultiplexTransportConfig) this.transportConfig; + if (transportConfig.getTransportListener() != null && transportManager != null) { + transportConfig.getTransportListener().onTransportEvent(transportManager.getConnectedTransports(), isTransportForServiceAvailable(SessionType.PCM), isTransportForServiceAvailable(SessionType.NAV)); + } } } - } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java index 56e1c8544..083f0c198 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java @@ -123,6 +123,8 @@ import com.smartdevicelink.trace.enums.InterfaceActivityDirection; import com.smartdevicelink.transport.BaseTransportConfig;
import com.smartdevicelink.transport.MultiplexTransportConfig;
import com.smartdevicelink.transport.SiphonServer;
+import com.smartdevicelink.transport.TCPTransport;
+import com.smartdevicelink.transport.TCPTransportConfig;
import com.smartdevicelink.transport.USBTransportConfig;
import com.smartdevicelink.transport.enums.TransportType;
import com.smartdevicelink.util.CorrelationIdGenerator;
@@ -1563,14 +1565,14 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase> synchronized(CONNECTION_REFERENCE_LOCK) {
//Handle legacy USB connections
- if(_transportConfig != null
- && TransportType.USB.equals(_transportConfig.getTransportType())){
+ if (_transportConfig != null
+ && TransportType.USB.equals(_transportConfig.getTransportType())) {
//A USB transport config was provided
- USBTransportConfig usbTransportConfig = (USBTransportConfig)_transportConfig;
- if(usbTransportConfig.getUsbAccessory() == null){
+ USBTransportConfig usbTransportConfig = (USBTransportConfig) _transportConfig;
+ if (usbTransportConfig.getUsbAccessory() == null) {
DebugTool.logInfo("Legacy USB transport config was used, but received null for accessory. Attempting to connect with router service");
//The accessory was null which means it came from a router service
- MultiplexTransportConfig multiplexTransportConfig = new MultiplexTransportConfig(usbTransportConfig.getUSBContext(),_appID);
+ MultiplexTransportConfig multiplexTransportConfig = new MultiplexTransportConfig(usbTransportConfig.getUSBContext(), _appID);
multiplexTransportConfig.setRequiresHighBandwidth(true);
multiplexTransportConfig.setSecurityLevel(MultiplexTransportConfig.FLAG_MULTI_SECURITY_OFF);
multiplexTransportConfig.setPrimaryTransports(Collections.singletonList(TransportType.USB));
@@ -1579,9 +1581,11 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase> }
}
- if(_transportConfig.getTransportType().equals(TransportType.MULTIPLEX)){
- this.sdlSession = new SdlSession2(_interfaceBroker,(MultiplexTransportConfig)_transportConfig);
- }else{
+ if (_transportConfig.getTransportType().equals(TransportType.MULTIPLEX)) {
+ this.sdlSession = new SdlSession2(_interfaceBroker, (MultiplexTransportConfig) _transportConfig);
+ }else if(_transportConfig.getTransportType().equals(TransportType.TCP)){
+ this.sdlSession = new SdlSession2(_interfaceBroker, (TCPTransportConfig) _transportConfig);
+ }else {
this.sdlSession = SdlSession.createSession((byte)getProtocolVersion().getMajor(),_interfaceBroker, _transportConfig);
}
}
|