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 380642b78a..a3a88aa9d1 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 @@ -50,7 +50,7 @@ public class FpgaSocket implements IWebSocket { private static final String TAG = FpgaSocket.class.getSimpleName(); private OkHttpClient client; - private WebSocket mWebSocket; + private volatile WebSocket mWebSocket; private EchoWebSocketListener listener; private IWebSocketConnectListener mWebSocketConnectListener; @@ -68,6 +68,10 @@ public class FpgaSocket implements IWebSocket { * 是否是被动关闭 */ private final AtomicBoolean isPassiveClose = new AtomicBoolean(false); + /** + * 是否已经连接成功 + */ + private final AtomicBoolean isConnected = new AtomicBoolean(false); /** * 接收数据超时原因 null时表示不是接收数据超时的原因 @@ -111,14 +115,14 @@ public class FpgaSocket implements IWebSocket { connect("连接中"); } - private void connect(String msg) { + private synchronized void connect(String msg) { if (mWebSocket == null) { if (mWebSocketConnectListener != null) mWebSocketConnectListener.onConnecting(msg); Request request = new Request.Builder() .url(wsHost) .build(); - client.newWebSocket(request, listener); + mWebSocket = client.newWebSocket(request, listener); } } @@ -151,7 +155,7 @@ public class FpgaSocket implements IWebSocket { @Override public boolean sendDataWebSocket(String data) { - if (mWebSocket != null) { + if (mWebSocket != null && isConnected.get()) { boolean result = mWebSocket.send(data); CupidLogUtils.i(TAG, "WebSocket send String= " + data + ", result= " + result); return result; @@ -161,7 +165,7 @@ public class FpgaSocket implements IWebSocket { @Override public boolean sendDataWebSocket(ByteString data) { - if (mWebSocket != null) { + if (mWebSocket != null && isConnected.get()) { boolean result = mWebSocket.send(data); CupidLogUtils.i(TAG, "WebSocket send ByteString=" + ByteUtil.byteArrToHex(data.toByteArray()) + ", result= " + result); return result; @@ -200,8 +204,9 @@ public class FpgaSocket implements IWebSocket { @Override public void onOpen(@NonNull WebSocket webSocket, @NonNull Response response) { super.onOpen(webSocket, response); - mWebSocket = webSocket; +// mWebSocket = webSocket; boolean isConnect = response.code() == 101; + isConnected.set(isConnect); if (!isConnect) { onPassiveClose(1001, "協議不匹配"); } else { @@ -342,6 +347,7 @@ public class FpgaSocket implements IWebSocket { * @param code code */ private void close(boolean isInitiative, int code) { + isConnected.set(false); String closeReason = null; if (isInitiative) { closeReason = "用户主动关闭";