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 ;
|
}
|
|
}
|