|
@ -0,0 +1,61 @@ |
|
|
|
|
|
package com.iflytop.handacid.app.websocket.client; |
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.json.JSONObject; |
|
|
|
|
|
import cn.hutool.json.JSONUtil; |
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
import org.java_websocket.client.WebSocketClient; |
|
|
|
|
|
import org.java_websocket.enums.ReadyState; |
|
|
|
|
|
import org.java_websocket.handshake.ServerHandshake; |
|
|
|
|
|
import org.springframework.scheduling.annotation.Scheduled; |
|
|
|
|
|
|
|
|
|
|
|
import java.net.URI; |
|
|
|
|
|
import java.util.function.Consumer; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* WebsocketClient |
|
|
|
|
|
*/ |
|
|
|
|
|
@Slf4j |
|
|
|
|
|
public class SocketClient extends WebSocketClient { |
|
|
|
|
|
private Consumer<JSONObject> consumer; |
|
|
|
|
|
|
|
|
|
|
|
public SocketClient(URI serverUri, Consumer<JSONObject> consumer) { |
|
|
|
|
|
super(serverUri); |
|
|
|
|
|
this.consumer = consumer; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void onOpen(ServerHandshake handshakedata) { |
|
|
|
|
|
log.info("device_status_listener_websocket connect success"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void onMessage(String message) { |
|
|
|
|
|
JSONObject jsonObject = JSONUtil.parseObj(message); |
|
|
|
|
|
consumer.accept(jsonObject); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void onClose(int code, String reason, boolean remote) { |
|
|
|
|
|
log.info("device_status_listener_websocket lost connection..."); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void onError(Exception ex) { |
|
|
|
|
|
log.info("device_status_listener_websocket on error"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//失去连接后重新连接 10s轮询 |
|
|
|
|
|
@Scheduled(fixedRate = 10000) |
|
|
|
|
|
private void autoConnect() { |
|
|
|
|
|
if (!isOpen()) { |
|
|
|
|
|
if (getReadyState().equals(ReadyState.NOT_YET_CONNECTED)) { |
|
|
|
|
|
try { |
|
|
|
|
|
connect(); |
|
|
|
|
|
} catch (IllegalStateException ignored) { |
|
|
|
|
|
} |
|
|
|
|
|
} else if (getReadyState().equals(ReadyState.CLOSED)) { |
|
|
|
|
|
reconnect(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |