[change] 修改WebSocket可能存在多个实例 产生异常bug
This commit is contained in:
@@ -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 = "用户主动关闭";
|
||||
|
||||
Reference in New Issue
Block a user