diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index cd2c63394d..a120c60187 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -184,7 +184,7 @@ class MoGoAutopilotProvider : */ override fun resetIpAddress(autoPilotIp: String) { // 关闭通信 - AdasManager.getInstance().disConnect() + AdasManager.getInstance().disconnect() // 延时执行连接指定IP地址 ThreadUtils.executeBySingleWithDelay(object : ThreadUtils.SimpleTask() { @RequiresPermission(permission.INTERNET) diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt index 3e9ee40f3b..b4fa7f381d 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt @@ -33,10 +33,6 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener, private var mCurrentAutopilotSpeed = 0f - override fun onAddressDisabled() { - - } - override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) { if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) { Logger.d(TAG, "webSocket 连接成功") @@ -57,6 +53,12 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener, AdasManager.getInstance().adasConfig.address CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus() + } else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTING) { + Logger.d(TAG, "webSocket 正在连接") + } else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS) { + Logger.d(TAG, "webSocket 正在搜索工控机IP") + } else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS) { + Logger.d(TAG, "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用") } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index da88468c89..37d697f6e4 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -49,7 +49,6 @@ import java.nio.charset.StandardCharsets; import java.util.HashSet; import mogo.webproto.WebsocketHeader; -import okhttp3.WebSocket; import okio.ByteString; /** @@ -118,6 +117,14 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec this.onMultiDeviceListener = onMultiDeviceListener; } + @Override + public void onStartFindIP() { + if (adasConnectStatusListener != null) { + ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS; + adasConnectStatusListener.onConnectionIPCStatus(ipcConnectionStatus, null); + } + } + /** * 可连通的IP * @@ -192,10 +199,6 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec clientPkFileName = "sn") private void connectSocket(String address) { if (mSocket != null) { - ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.CONNECTING; - if (adasConnectStatusListener != null) { - adasConnectStatusListener.onConnectionIPCStatus(ipcConnectionStatus, null); - } mSocket.connectWebSocket(address); } } @@ -431,7 +434,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * 断开与工控机的链接 */ @Override - public void disConnect() { + public void disconnect() { if (!adasOptions.isClient()) { // ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.DISCONNECTED; // if (adasConnectStatusListener != null) { @@ -460,6 +463,14 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } + @Override + public void onConnecting() { + ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.CONNECTING; + if (adasConnectStatusListener != null) { + adasConnectStatusListener.onConnectionIPCStatus(ipcConnectionStatus, null); + } + } + @Override public void onWebSocketConnectSuccess() { ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.CONNECTED; @@ -512,8 +523,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec mSocket.setIsReconnect(false); } if (adasConnectStatusListener != null) { - ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.DISCONNECTED; - adasConnectStatusListener.onAddressDisabled(); + ipcConnectionStatus = Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS; adasConnectStatusListener.onConnectionIPCStatus(ipcConnectionStatus, "找不到可用的IP"); } return; diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index a8b875f9d2..3b1d7604ad 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -100,7 +100,7 @@ public class AdasManager implements IAdasNetCommApi { public synchronized void destory() { if (mChannel != null) { mChannel.onDisconnectRtp(); - mChannel.disConnect(); + mChannel.disconnect(); mChannel = null; } } @@ -114,9 +114,9 @@ public class AdasManager implements IAdasNetCommApi { } @Override - public void disConnect() { + public void disconnect() { if (mChannel != null) { - mChannel.disConnect(); + mChannel.disconnect(); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index 478e510afd..201c6dfcd1 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -17,7 +17,7 @@ public interface IAdasNetCommApi { /** * 与工控机断开连接 */ - void disConnect(); + void disconnect(); /** * 控制自动驾驶车辆 自动模式 自动驾驶 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java index 9e5a4e602f..1e0df218d0 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java @@ -14,7 +14,7 @@ public interface OnAdasConnectStatusListener { * 指定IP或固定IP(轮询ping集合中的IP) 找不到可用的IP时会被调用 * 规则: TextUtils.isEmpty() */ - void onAddressDisabled(); +// void onAddressDisabled(); /** * 与工控机链接状态变化 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java index e6e6dae8d2..50f64645ee 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java @@ -65,6 +65,10 @@ public class Constants { /** * 正在搜索IP */ - int SEARCH_ADDRESS = 0x04; + int SEARCH_ADDRESS = 0x03; + /** + * 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用 + */ + int NOT_FOUND_ADDRESS = 0x04; } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java index 34a4083f00..612fda44a1 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java @@ -10,7 +10,8 @@ public final class Define { @IntDef(flag = true, value = {Constants.IPC_CONNECTION_STATUS.CONNECTED, Constants.IPC_CONNECTION_STATUS.DISCONNECTED, Constants.IPC_CONNECTION_STATUS.CONNECTING, - Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS}) + Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS, + Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS}) @Retention(RetentionPolicy.SOURCE) public @interface IPCConnectionStatus { } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java index 2f60c82e10..4d9668e08a 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java @@ -7,6 +7,8 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.Future; /** @@ -19,6 +21,7 @@ public class IPCFixationIPHelper { private volatile boolean isCallListener = false;//是否已经调用了回调 private volatile int unavailableCount = 0;//不可用IP个数 private volatile int queryCount;//要查询的IP个数 + private Timer retryTimer; public IPCFixationIPHelper(IIPCFixationIPListener listener) { if (listener == null) @@ -28,7 +31,12 @@ public class IPCFixationIPHelper { public interface IIPCFixationIPListener { /** - * 可连通的IP + * 开始查找可用IP + */ + void onStartFindIP(); + + /** + * 轮询结果可连通的IP * * @param ip 返回可用IP 当为null时表示无可用IP */ @@ -49,7 +57,12 @@ public class IPCFixationIPHelper { /** * 开始根据固定IP列表惊醒PING 方式查找可用工控机 */ - public void start(HashSet ips) { + public void start(final HashSet ips) { + listener.onStartFindIP(); + if (retryTimer != null) { + retryTimer.cancel(); + retryTimer = null; + } if (ips == null || ips.isEmpty()) { listener.onAvailableIP(null); } else { @@ -71,7 +84,7 @@ public class IPCFixationIPHelper { interrupted(); } } else { - allNotAvailable(); + allNotAvailable(ips); } } }; @@ -81,7 +94,7 @@ public class IPCFixationIPHelper { } } - private synchronized void allNotAvailable() { + private synchronized void allNotAvailable(final HashSet ips) { unavailableCount++; CupidLogUtils.i(TAG, "unavailableCount=" + unavailableCount); if (queryCount == unavailableCount) { @@ -89,6 +102,16 @@ public class IPCFixationIPHelper { isCallListener = true; listener.onAvailableIP(null); CupidLogUtils.i(TAG, "所有IP均不可用"); + //当配置中的所有IP都ping不通时,需要继续ping + if (retryTimer == null) { + retryTimer = new Timer(); + retryTimer.schedule(new TimerTask() { + @Override + public void run() { + start(ips); + } + }, 5 * 1000L);//延时 + } } } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java index 6c7ebb9da5..2c877b66fb 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java @@ -94,6 +94,8 @@ public class FpgaSocket implements IWebSocket { private void connect() { if (client != null && mWebSocket == null) { + if (mWebSocketConnectListener != null) + mWebSocketConnectListener.onConnecting(); if (request == null) request = new Request.Builder() .url(wsHost) @@ -167,6 +169,11 @@ public class FpgaSocket implements IWebSocket { public interface IWebSocketConnectListener { + /** + * 正在连接 + */ + void onConnecting(); + void onWebSocketConnectSuccess(); void onWebSocketConnectFailed(String t); @@ -250,27 +257,41 @@ public class FpgaSocket implements IWebSocket { public void onClosing(@NonNull WebSocket webSocket, int code, @NonNull String reason) { super.onClosing(webSocket, code, reason); CupidLogUtils.e(TAG, "WebSocket onClosing= " + reason); - mWebSocket = null; - if (mWebSocketConnectListener != null) - mWebSocketConnectListener.onWebSocketConnectFailed(reason); - reconnect(); + if (mWebSocket != null) { + mWebSocket.close(1000, null); + mWebSocket.cancel(); + mWebSocket = null; + } else { + if (mWebSocketConnectListener != null) + mWebSocketConnectListener.onWebSocketConnectFailed(reason); + reconnect(); + } } @Override public void onClosed(@NonNull WebSocket webSocket, int code, @NonNull String reason) { super.onClosed(webSocket, code, reason); CupidLogUtils.e(TAG, "WebSocket onClosed= " + reason); - mWebSocket = null; - if (mWebSocketConnectListener != null) - mWebSocketConnectListener.onWebSocketConnectFailed(reason); - reconnect(); + if (mWebSocket != null) { + mWebSocket.close(1000, null); + mWebSocket.cancel(); + mWebSocket = null; + } else { + if (mWebSocketConnectListener != null) + mWebSocketConnectListener.onWebSocketConnectFailed(reason); + reconnect(); + } } @Override public void onFailure(@NonNull WebSocket webSocket, @NonNull Throwable t, Response response) { super.onFailure(webSocket, t, response); CupidLogUtils.e(TAG, "WebSocket onFailure= " + t); - mWebSocket = null; + if (mWebSocket != null) { + mWebSocket.close(1000, null); + mWebSocket.cancel(); + mWebSocket = null; + } if (mWebSocketConnectListener != null) mWebSocketConnectListener.onWebSocketConnectFailed(t.toString()); reconnect();