[change] 修改WebSocket可能存在多个实例 产生异常bug

This commit is contained in:
xinfengkun
2022-09-02 14:30:38 +08:00
parent 4c05c8b9d7
commit efc83605c1

View File

@@ -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 = "用户主动关闭";