Browse Source

Merge pull request #5036 in DESIGN/design from final/10.0 to release/10.0

* commit '78b16ac33e319cb17176240cb7301852f1e2e9bd':
  REPORT-53900 远程设计自动断开
zheng-1641779399395
superman 3 years ago
parent
commit
cf1a0d6ac3
  1. 53
      designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java

53
designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java

@ -32,6 +32,8 @@ import javax.swing.*;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
public class DesignerSocketIO { public class DesignerSocketIO {
@ -45,7 +47,7 @@ public class DesignerSocketIO {
if (DesignerEnvManager.getEnvManager().isHttps()) { if (DesignerEnvManager.getEnvManager().isHttps()) {
showConnectionLostDialog(); showConnectionLostDialog();
} }
} }
}); });
} }
@ -57,6 +59,8 @@ public class DesignerSocketIO {
private static Socket socket = null; private static Socket socket = null;
private static Status status = Status.Disconnected; private static Status status = Status.Disconnected;
private static Timer disConnectHintTimer = null;
private static long disConnectHintTimerDelay = 3000;
//维护一个当前工作环境的uri列表 //维护一个当前工作环境的uri列表
private static String[] uri; private static String[] uri;
//维护一个关于uri列表的计数器 //维护一个关于uri列表的计数器
@ -87,18 +91,19 @@ public class DesignerSocketIO {
createSocket(); createSocket();
} }
private static void createSocket(){ private static void createSocket() {
//根据uri和计数器建立连接,并注册监听 //根据uri和计数器建立连接,并注册监听
try { try {
if(count<uri.length) { if (count < uri.length) {
socket = IO.socket(new URI(uri[count])); socket = IO.socket(new URI(uri[count]));
socket.on(WorkspaceConstants.WS_LOGRECORD, printLog); socket.on(WorkspaceConstants.WS_LOGRECORD, printLog);
socket.on(WorkspaceConstants.CONFIG_MODIFY, modifyConfig); socket.on(WorkspaceConstants.CONFIG_MODIFY, modifyConfig);
socket.on(Socket.EVENT_CONNECT_ERROR, failRetry); socket.on(Socket.EVENT_CONNECT_ERROR, failRetry);
socket.on(Socket.EVENT_DISCONNECT, disConnectHint); socket.on(Socket.EVENT_DISCONNECT, disConnectHint);
socket.on(Socket.EVENT_CONNECT, handleConnect);
socket.connect(); socket.connect();
status = Status.Connected; status = Status.Connected;
}else { } else {
//表示所有的uri都连接不成功 //表示所有的uri都连接不成功
FineLoggerFactory.getLogger().warn("All uris failed to connect"); FineLoggerFactory.getLogger().warn("All uris failed to connect");
} }
@ -154,19 +159,41 @@ public class DesignerSocketIO {
} }
}; };
private static final Emitter.Listener handleConnect = new Emitter.Listener() {
@Override
public void call(Object... objects) {
if (disConnectHintTimer != null) {
FineLoggerFactory.getLogger().info("cancel disConnectHintTimer");
disConnectHintTimer.cancel();
}
}
};
//断开连接提醒监听器 //断开连接提醒监听器
private static final Emitter.Listener disConnectHint = new Emitter.Listener() { private static final Emitter.Listener disConnectHint = new Emitter.Listener() {
@Override @Override
public void call(Object... objects) { public void call(Object... objects) {
/* FineLoggerFactory.getLogger().info("start disConnectHintTimer");
* todo 远程心跳断开不一定 socket 断开 和远程紧密相关的业务都绑定在心跳上切换成心跳断开之后进行提醒 disConnectHintTimer = new Timer();
* socket 只用推日志和通知配置变更 disConnectHintTimer.schedule(new TimerTask() {
*/ @Override
FineLoggerFactory.getLogger().error("disConnected args: {}", Arrays.toString(objects)); public void run() {
if (status != Status.Disconnecting) { try {
showConnectionLostDialog(); /*
} * todo 远程心跳断开不一定 socket 断开 和远程紧密相关的业务都绑定在心跳上切换成心跳断开之后进行提醒
status = Status.Disconnected; * socket 只用推日志和通知配置变更
*/
FineLoggerFactory.getLogger().error("disConnected args: {}", Arrays.toString(objects));
if (status != Status.Disconnecting) {
showConnectionLostDialog();
}
status = Status.Disconnected;
} finally {
disConnectHintTimer.cancel();
disConnectHintTimer = null;
}
}
}, disConnectHintTimerDelay);
} }
}; };

Loading…
Cancel
Save