From efc83605c1ecc002717f67d91f55c0f846952903 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Fri, 2 Sep 2022 14:30:38 +0800 Subject: [PATCH] =?UTF-8?q?[change]=20=E4=BF=AE=E6=94=B9WebSocket=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AD=98=E5=9C=A8=E5=A4=9A=E4=B8=AA=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=20=E4=BA=A7=E7=94=9F=E5=BC=82=E5=B8=B8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/adas/high/socket/FpgaSocket.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) 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 = "用户主动关闭";