project init
This commit is contained in:
78
device-socket/src/main/java/com/sv/socket/DeviceSocket.java
Normal file
78
device-socket/src/main/java/com/sv/socket/DeviceSocket.java
Normal file
@@ -0,0 +1,78 @@
|
||||
package com.sv.socket;
|
||||
|
||||
import com.common.DeviceDTO;
|
||||
import com.sv.entity.Device;
|
||||
import com.sv.socket.event.SocketConnectEvent;
|
||||
import com.sv.socket.event.SocketMessageEvent;
|
||||
import com.sv.socket.event.SocketReconnectEvent;
|
||||
import com.ydd.framework.core.common.utils.ValidationUtils;
|
||||
import org.java_websocket.client.WebSocketClient;
|
||||
import org.java_websocket.handshake.ServerHandshake;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.net.URI;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
/**
|
||||
* 设备连接
|
||||
*/
|
||||
public class DeviceSocket extends WebSocketClient {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(DeviceSocket.class);
|
||||
|
||||
private DeviceDTO device;
|
||||
|
||||
private CountDownLatch countDownLatch;
|
||||
|
||||
|
||||
@Resource
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
public DeviceSocket(ApplicationContext applicationContext, DeviceDTO device, URI serverUri) {
|
||||
super(serverUri);
|
||||
ValidationUtils.assertNotNull(device);
|
||||
this.device = device;
|
||||
this.applicationContext = applicationContext;
|
||||
countDownLatch = new CountDownLatch(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(ServerHandshake handshakedata) {
|
||||
applicationContext.publishEvent(new SocketConnectEvent(device, countDownLatch, DeviceSocket.this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(String message) {
|
||||
logger.info("收到设备" + device.getName() + "消息:" + message);
|
||||
applicationContext.publishEvent(new SocketMessageEvent(message, device));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(int code, String reason, boolean remote) {
|
||||
logger.info("设备【{}】断开连接,code:【{}】,reason:【{}】", device.getStream(), code, reason);
|
||||
SocketConnections.sockets.remove(device.getStream());
|
||||
countDownLatch.countDown();
|
||||
if (device.getLastCloseTime() == null)
|
||||
device.setLastCloseTime(System.currentTimeMillis());
|
||||
applicationContext.publishEvent(new SocketReconnectEvent(device));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Exception ex) {
|
||||
SocketConnections.sockets.remove(device.getStream());
|
||||
}
|
||||
|
||||
|
||||
public DeviceDTO getDevice() {
|
||||
return device;
|
||||
}
|
||||
|
||||
|
||||
public String getStreamName() {
|
||||
return device.getStream();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user