|
@@ -1,10 +1,9 @@
|
|
|
package com.persagy.ibms.data.sdk.service;
|
|
|
|
|
|
import java.net.URI;
|
|
|
-import java.net.URISyntaxException;
|
|
|
-
|
|
|
-import javax.annotation.PostConstruct;
|
|
|
-
|
|
|
+import org.java_websocket.WebSocket;
|
|
|
+import org.java_websocket.client.WebSocketClient;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import com.persagy.ibms.data.sdk.util.RepositoryContainer;
|
|
@@ -17,43 +16,78 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
public class WebSocketCheckThread extends Thread {
|
|
|
- @PostConstruct
|
|
|
- public void init() {
|
|
|
- new Thread(this).start();
|
|
|
- }
|
|
|
|
|
|
- public void run() {
|
|
|
- while (true) {
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param :
|
|
|
+ * @description:启动专门的定时任务去自动断开重新连接(10秒钟监测一次)
|
|
|
+ * @exception:
|
|
|
+ * @author: LuoGuangyi
|
|
|
+ * @company: Persagy Technology Co.,Ltd
|
|
|
+ * @return: null
|
|
|
+ * @since: 2020/10/20 9:54
|
|
|
+ * @version: V1.0
|
|
|
+ */
|
|
|
+ @Scheduled(initialDelay = 20000, fixedDelay = 120000)
|
|
|
+ public void holderConneted() {
|
|
|
+ try {
|
|
|
+ WebSocketClient outCallWebSocketClientHolder = IOTWebSocketClient.client;
|
|
|
+ if (null == outCallWebSocketClientHolder) {
|
|
|
+ log.info("当前连接还未建立");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!outCallWebSocketClientHolder.isOpen()) {
|
|
|
+ log.error("连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
|
|
|
+ if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
|
|
|
+ outCallWebSocketClientHolder.connect();
|
|
|
+ } else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING) || outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
|
|
|
+ outCallWebSocketClientHolder.reconnect();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("连接发生异常,尝试重新连接", e);
|
|
|
+ //重连异常后删除旧的连接并重新连接
|
|
|
try {
|
|
|
- Thread.sleep(1000L * 15);
|
|
|
- } catch (InterruptedException e) {
|
|
|
- log.error(e.getMessage(), e);
|
|
|
+ if (!IOTWebSocketClient.client.isOpen()) {
|
|
|
+ IOTWebSocketClient.client.close();
|
|
|
+ IOTWebSocketClient.client = new IOTWebSocketClient(new URI(Constant.iot_websocket_url + "?projectId="
|
|
|
+ + RepositoryContainer.RepositoryBase.projectId.substring(2) + "&type=iot,text,pointset"));
|
|
|
+ IOTWebSocketClient.client.connect();
|
|
|
+ }
|
|
|
+ } catch (Exception e2) {
|
|
|
+ log.error(e2.getMessage(),e2);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- if (IOTWebSocketClient.client != null) {
|
|
|
- try {
|
|
|
- if (!IOTWebSocketClient.client.isOpen()) {
|
|
|
- IOTWebSocketClient.client = new IOTWebSocketClient(new URI(Constant.iot_websocket_url + "?projectId="
|
|
|
- + RepositoryContainer.RepositoryBase.projectId.substring(2) + "&type=iot,text,pointset"));
|
|
|
- IOTWebSocketClient.client.connect();
|
|
|
- }
|
|
|
- } catch (URISyntaxException e) {
|
|
|
- log.warn(e.getMessage(), e);
|
|
|
- log.error(e.getMessage(), e);
|
|
|
+ try {
|
|
|
+ WebSocketClient outCallWebSocketClientHolder = AlarmWebSocketClient.client;
|
|
|
+ if (null == outCallWebSocketClientHolder) {
|
|
|
+ log.info("当前连接还未建立");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!outCallWebSocketClientHolder.isOpen()) {
|
|
|
+ log.error("连接已经断开,正在重新连接,当前状态为[{}]", outCallWebSocketClientHolder.getReadyState());
|
|
|
+ if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.NOT_YET_CONNECTED)) {
|
|
|
+ outCallWebSocketClientHolder.connect();
|
|
|
+ } else if (outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSING) || outCallWebSocketClientHolder.getReadyState().equals(WebSocket.READYSTATE.CLOSED)) {
|
|
|
+ outCallWebSocketClientHolder.reconnect();
|
|
|
}
|
|
|
}
|
|
|
- if (AlarmWebSocketClient.client != null) {
|
|
|
- try {
|
|
|
- if (!AlarmWebSocketClient.client.isOpen()) {
|
|
|
- AlarmWebSocketClient.client = new AlarmWebSocketClient(new URI(Constant.iot_websocket_url));
|
|
|
- AlarmWebSocketClient.client.connect();
|
|
|
- }
|
|
|
- } catch (URISyntaxException e) {
|
|
|
- log.warn(e.getMessage(), e);
|
|
|
- log.error(e.getMessage(), e);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("连接发生异常,尝试重新连接", e);
|
|
|
+ //重连异常后删除旧的连接并重新连接
|
|
|
+ try {
|
|
|
+ if (!AlarmWebSocketClient.client.isOpen()) {
|
|
|
+ AlarmWebSocketClient.client.close();
|
|
|
+ AlarmWebSocketClient.client = new AlarmWebSocketClient(new URI(Constant.alarm_websocket_url + "/" + RepositoryContainer.RepositoryBase.projectId));
|
|
|
+ AlarmWebSocketClient.client.connect();
|
|
|
}
|
|
|
+ } catch (Exception e2) {
|
|
|
+ log.error(e2.getMessage(),e2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|