package com.terra.lfdcexp.config; import com.terra.lfdcexp.entity.FenceEntityVo; import com.terra.lfdcexp.util.HttpClientUtil; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.enums.ReadyState; import org.java_websocket.handshake.ServerHandshake; import java.net.URISyntaxException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.java_websocket.WebSocket; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ServerHandshake; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.net.URI; import java.net.URISyntaxException; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; public class WebSocketC { private static Logger logger = LoggerFactory.getLogger(WebSocketC.class); public static WebSocketClient client; public static boolean isConnect = false; @Value("${http.websocket}") private String http_websocket; // 单例线程池 ExecutorService executorService = Executors.newSingleThreadExecutor(); @Bean public WebSocketClient getWebSocketClient() { try { logger.info("websocket:",http_websocket); client = new WebSocketClient(new URI(http_websocket), new Draft_6455()) { @Override public void onOpen(ServerHandshake serverHandshake) { logger.info("握手成功"); isConnect = true; } @Override public void onMessage(String msg) { logger.info("收到消息==========" + msg); if (null != msg && !msg.trim().equals("")) { // 异步线程加入线程池,进行发送操作 executorService.submit(() -> { FenceEntityVo fenceEntityVo = new FenceEntityVo(); // code=21 的记录取出 fenceEntityVo.isAlert(msg); }); } } @Override public void onClose(int i, String s, boolean b) { logger.info("链接已关闭"); } @Override public void onError(Exception e) { e.printStackTrace(); logger.info("发生错误已关闭"); } }; Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (!isConnect) { WebSocketClient client = getWebSocketClient(); logger.info("正在连接中..."); if (client.getReadyState().equals(ReadyState.NOT_YET_CONNECTED)) { // 未连接状态 try { client.connect(); } catch (Exception e) { e.printStackTrace(); } } else if (client.getReadyState().equals(ReadyState.CLOSING) || client.getReadyState().equals(ReadyState.CLOSED)) { // 正关闭状态 或者 关闭状态 try { client.reconnect(); } catch (IllegalArgumentException e) { e.printStackTrace(); } } } } }, 1000, 5000); // client.connect();// 连接 return client; } catch (URISyntaxException e) { e.printStackTrace(); } return null ; } }