package com.whyc.ws; import com.whyc.service.DeviceService; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; @ServerEndpoint(value = "/device", encoders = WebSocketEncoder.class) @Component @Api(tags = "设备ws") @Slf4j public class DeviceWebSocket { private Session session; private volatile Thread thread; //private Integer deviceId; private static DeviceService service; @Autowired public void setService(DeviceService service) { this.service = service; } @OnOpen public void onOpen(Session session) { log.warn("DeviceWebSocket会话开启了:{}",session); this.session = session; //this.deviceId = deviceId; if(session!=null) { thread = new Thread("Thread_device") { public void run() { while (!thread.isInterrupted()) { try { if (session.isOpen()) { session.getBasicRemote().sendObject(service.getAllRT()); } sleep(1000); } catch (IOException | InterruptedException | EncodeException e) { interrupt(); } } } }; thread.start(); } } @OnMessage public void onMessage(String message) { try { this.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } private void sendMessage(String message) { if(session!=null) { thread = new Thread("Thread_device") { public void run() { while (!thread.isInterrupted()) { try { if (session.isOpen()) { //session.getBasicRemote().sendObject(service.getStatus()); session.getBasicRemote().sendObject(null); } sleep(1000); } catch (IOException | InterruptedException | EncodeException e) { interrupt(); } } } }; thread.start(); } } @OnClose public void onClose() { if (thread != null && thread.isAlive()) { thread.interrupt(); } log.warn("webSocket会话关闭了:{}",session); } @OnError public void onError(Throwable error) { error.printStackTrace(); if (thread != null && thread.isAlive()) { thread.interrupt(); } } }