From 74deae6c18da5f8962efdc3777031c40e6f6f44a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 8 Feb 2025 10:59:05 +0800 Subject: [PATCH] update --- .../app/controler/ws/AppEventWSEndpoint.java | 6 +- .../app/controler/ws/AppStateWSEndpoint.java | 11 +-- .../java/iflytop/app/driver/SubDeviceDriver.java | 15 +++- .../app/driver/channel/SubDeviceUartChannel.java | 33 +++++-- .../iflytop/app/factory/TPMIPacketFactory.java | 18 ++-- .../app/service/base/AppEventBusService.java | 79 ---------------- .../iflytop/app/service/base/EventBusService.java | 79 ++++++++++++++++ .../iflytop/app/service/base/GstateService.java | 7 ++ .../app/service/base/UIStateControlService.java | 13 +++ .../app/service/base/WebSocketEndpointMgr.java | 99 ++++++++++++++++++++ .../service/task/MeasurementTaskCtrlService.java | 24 +++++ .../app/service/ui/AppWebSocketEndpointMgr.java | 100 --------------------- .../app/service/ui/UIStateControlService.java | 13 --- .../iflytop/config/WebSocketConfiguration.java | 13 +++ 14 files changed, 286 insertions(+), 224 deletions(-) delete mode 100644 src/main/java/iflytop/app/service/base/AppEventBusService.java create mode 100644 src/main/java/iflytop/app/service/base/EventBusService.java create mode 100644 src/main/java/iflytop/app/service/base/GstateService.java create mode 100644 src/main/java/iflytop/app/service/base/UIStateControlService.java create mode 100644 src/main/java/iflytop/app/service/base/WebSocketEndpointMgr.java delete mode 100644 src/main/java/iflytop/app/service/ui/AppWebSocketEndpointMgr.java delete mode 100644 src/main/java/iflytop/app/service/ui/UIStateControlService.java create mode 100644 src/main/java/iflytop/config/WebSocketConfiguration.java diff --git a/src/main/java/iflytop/app/controler/ws/AppEventWSEndpoint.java b/src/main/java/iflytop/app/controler/ws/AppEventWSEndpoint.java index 76c1b78..fc1a5ad 100644 --- a/src/main/java/iflytop/app/controler/ws/AppEventWSEndpoint.java +++ b/src/main/java/iflytop/app/controler/ws/AppEventWSEndpoint.java @@ -1,6 +1,6 @@ package iflytop.app.controler.ws; -import iflytop.app.service.ui.AppWebSocketEndpointMgr; +import iflytop.app.service.base.WebSocketEndpointMgr; import iflytop.app.utils.SpringBootBeanUtil; import jakarta.websocket.*; import jakarta.websocket.server.ServerEndpoint; @@ -27,14 +27,14 @@ public class AppEventWSEndpoint { public void onOpen(Session session, EndpointConfig endpointConfig) { // 保存 session 到对象 this.session = session; - SpringBootBeanUtil.getBean(AppWebSocketEndpointMgr.class).pushEventWebsocketSession(session); + SpringBootBeanUtil.getBean(WebSocketEndpointMgr.class).pushEventWebsocketSession(session); log.info("[websocket] 新的连接:id={}", this.session.getId()); } // 连接关闭 @OnClose public void onClose(CloseReason closeReason) { - SpringBootBeanUtil.getBean(AppWebSocketEndpointMgr.class).removeEventWebsocketSession(this.session); + SpringBootBeanUtil.getBean(WebSocketEndpointMgr.class).removeEventWebsocketSession(this.session); log.info("[websocket] 连接断开:id={},reason={}", this.session.getId(), closeReason); } diff --git a/src/main/java/iflytop/app/controler/ws/AppStateWSEndpoint.java b/src/main/java/iflytop/app/controler/ws/AppStateWSEndpoint.java index e1ed75c..a5fbe99 100644 --- a/src/main/java/iflytop/app/controler/ws/AppStateWSEndpoint.java +++ b/src/main/java/iflytop/app/controler/ws/AppStateWSEndpoint.java @@ -1,6 +1,6 @@ package iflytop.app.controler.ws; -import iflytop.app.service.ui.AppWebSocketEndpointMgr; +import iflytop.app.service.base.WebSocketEndpointMgr; import iflytop.app.utils.SpringBootBeanUtil; import jakarta.websocket.*; import jakarta.websocket.server.ServerEndpoint; @@ -13,11 +13,8 @@ import java.io.IOException; @Slf4j @Component public class AppStateWSEndpoint { - private Session session; - - // 收到消息 @OnMessage public void onMessage(String message) throws IOException { @@ -29,14 +26,14 @@ public class AppStateWSEndpoint { public void onOpen(Session session, EndpointConfig endpointConfig) { // 保存 session 到对象 this.session = session; - SpringBootBeanUtil.getBean(AppWebSocketEndpointMgr.class).pushStateWebsocketSession(session); - log.info("[websocket] 新的连接:id={}", this.session.getId()); + SpringBootBeanUtil.getBean(WebSocketEndpointMgr.class).pushStateWebsocketSession(session); + log.info("{} [websocket] 新的连接:id={}", this,this.session.getId()); } // 连接关闭 @OnClose public void onClose(CloseReason closeReason) { - SpringBootBeanUtil.getBean(AppWebSocketEndpointMgr.class).removeStateWebsocketSession(this.session); + SpringBootBeanUtil.getBean(WebSocketEndpointMgr.class).removeStateWebsocketSession(this.session); log.info("[websocket] 连接断开:id={},reason={}", this.session.getId(), closeReason); } diff --git a/src/main/java/iflytop/app/driver/SubDeviceDriver.java b/src/main/java/iflytop/app/driver/SubDeviceDriver.java index 10e97c3..8360404 100644 --- a/src/main/java/iflytop/app/driver/SubDeviceDriver.java +++ b/src/main/java/iflytop/app/driver/SubDeviceDriver.java @@ -7,6 +7,7 @@ import iflytop.app.type.SubDeviceChannel; import iflytop.app.type.exception.AppException; import iflytop.app.type.protocol.TPMIPacket; import jakarta.annotation.Resource; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @@ -39,7 +40,7 @@ public class SubDeviceDriver { public TPMIStatus getStatus() { var status = new TPMIStatus(); - if (subDeviceUartChannel.getSubDeviceState().isConnect) { + if (subDeviceUartChannel.isConnected()) { status.status = SubDeviceChannel.UART_CHANNEL; status.state = subDeviceUartChannel.getSubDeviceState(); status.connected = true; @@ -55,6 +56,10 @@ public class SubDeviceDriver { } } + public Boolean isConnected() { + return subDeviceUartChannel.isConnected() || subDeviceBleChannel.isConnected(); + } + public boolean ping() { var packet = TPMIPacketFactory.buildCommand(TPMIPacket.Command.PING); @@ -99,6 +104,7 @@ public class SubDeviceDriver { txPacket(packet, 10); } + // // PRIVATE // @@ -108,4 +114,11 @@ public class SubDeviceDriver { } return subDeviceUartChannel.sendPacket(packet, overtime); } + + @Scheduled(fixedDelay = 10000) + void pingSubDevice() { + if (isConnected()) { + ping(); + } + } } diff --git a/src/main/java/iflytop/app/driver/channel/SubDeviceUartChannel.java b/src/main/java/iflytop/app/driver/channel/SubDeviceUartChannel.java index 9c78146..e94614b 100644 --- a/src/main/java/iflytop/app/driver/channel/SubDeviceUartChannel.java +++ b/src/main/java/iflytop/app/driver/channel/SubDeviceUartChannel.java @@ -169,7 +169,6 @@ public class SubDeviceUartChannel { byte[] newData = new byte[clientPort.bytesAvailable()]; int numRead = clientPort.readBytes(newData, newData.length); rxBuffer.push(newData, numRead); - dumpRawRx(newData, numRead); } else if (serialPortEvent.getEventType() == SerialPort.LISTENING_EVENT_PORT_DISCONNECTED) { log.warn("serialEvent: port disconnected"); closeCom(); @@ -209,6 +208,10 @@ public class SubDeviceUartChannel { return state; } + synchronized public Boolean isConnected() { + return client != null && client.isOpen(); + } + synchronized public TPMIPacket sendPacket(TPMIPacket tx, Integer overtime) throws AppException { return sendPacket(client, tx, overtime); } @@ -233,7 +236,14 @@ public class SubDeviceUartChannel { ctCxt.newCtCxt(tx); serialPort.writeBytes(tx.rawpacket, tx.rawpacket.length); - log.info("TX PACKET: {}", ZByteUtils.bytesToHexString(tx.rawpacket, tx.rawpacket.length)); + + + if (tx.getCommand().equals(TPMIPacket.Command.PING)) { + log.debug("TX PACKET: {}", ZByteUtils.bytesToHexString(tx.rawpacket, tx.rawpacket.length)); + } else { + log.info("TX PACKET: {}", ZByteUtils.bytesToHexString(tx.rawpacket, tx.rawpacket.length)); + } + try { ctCxt.waitCxt(overtime); @@ -292,7 +302,7 @@ public class SubDeviceUartChannel { byte[] rxbuf = new byte[1024]; //RX VAL int rxlen = serialPort.readBytes(rxbuf, rxbuf.length); - dumpRawRx(rxbuf, rxlen); + log.info("RX RAW: {} ({})", ZByteUtils.bytesToHexString(rxbuf, rxlen), rxlen); //Return packet return TPMIPacketFactory.parseRawRxPacketToResponse(rxbuf, rxlen); @@ -304,10 +314,6 @@ public class SubDeviceUartChannel { log.info("TX RAW: {}", packet); } - static private void dumpRawRx(byte[] packet, int len) { - log.debug("RX RAW: {} ({})", ZByteUtils.bytesToHexString(packet, len), len); - } - private void processUartRxData() { rxBuffer.waitData(); //block @@ -321,10 +327,21 @@ public class SubDeviceUartChannel { byte[] processbuf = rxBuffer.cpy(); int offset = 0; + log.debug("PARSE RX: {} ({})", ZByteUtils.bytesToHexString(processbuf, processbuf.length), processbuf.length); + for (offset = 0; offset < processbuf.length; ) { var report = TPMIPacketFactory.analysisRawRxData(processbuf, processbuf.length, offset); if (report.result.equals(TPMIPacketFactory.PacketAnalysisResult.SUC)) { - log.info("RX PACKET: {}", report.packet); + var rxpacket = report.packet; + if (rxpacket.getCommand() != null) { + if (rxpacket.getCommand().equals(TPMIPacket.Command.PING)) { + log.debug("RX PACKET: {}", rxpacket); + } else { + log.info("RX PACKET: {}", rxpacket); + } + } else { + log.warn("RX UNKOWN COMMAND PACKET: {}", rxpacket); + } offset += report.packet.getPacketLen(); processRXPacket(report.packet); lastRxPacketTime = System.currentTimeMillis(); diff --git a/src/main/java/iflytop/app/factory/TPMIPacketFactory.java b/src/main/java/iflytop/app/factory/TPMIPacketFactory.java index cdcd54e..e77baab 100644 --- a/src/main/java/iflytop/app/factory/TPMIPacketFactory.java +++ b/src/main/java/iflytop/app/factory/TPMIPacketFactory.java @@ -111,7 +111,7 @@ public class TPMIPacketFactory { rawpacket[TPMIPacket.P_LEN_OFF] = (byte) (data.length + TPMIPacket.FIX_PACKET_LEN); rawpacket[TPMIPacket.P_INDEX_OFF] = rx.getIndex(); rawpacket[TPMIPacket.P_TYPE_OFF] = (byte) TPMIPacket.PacketType.RESPONSE.ordinal(); - rawpacket[TPMIPacket.P_CMD_OFF] = (byte) rx.getCommand().ordinal(); + rawpacket[TPMIPacket.P_CMD_OFF] = (byte) rx.getCommand().getIndex(); rawpacket[TPMIPacket.P_DATA_TYPE_OFF] = (byte) dataType.ordinal(); System.arraycopy(data, 0, rawpacket, TPMIPacket.P_DATA_OFF, data.length); rawpacket[rawpacket.length - 1] = TPMIPacket.P_TAIL; @@ -193,20 +193,12 @@ public class TPMIPacketFactory { } - /** - * 解析接收到的数据包,并构造成SubDevicePacket, - * @param rawpacket 接收到的数据包,包含多个数据包时,返回第一个数据包 - * @param length 数据包长度 - * @return 第一个数据包 - */ synchronized static public TPMIPacket parseRawRxPacketToResponse(byte[] rawpacket, int length) { // SubDevicePacketUtils - for (int i = 0; i < length; i++) { - if (isValidatePacket(rawpacket, length, i).equals(PacketAnalysisResult.SUC)) { - var newPacket = new TPMIPacket(rawpacket); - if (newPacket.getPacketType().equals(TPMIPacket.PacketType.RESPONSE)) { - return newPacket; - } + if (isValidatePacket(rawpacket, length, 0).equals(PacketAnalysisResult.SUC)) { + var newPacket = new TPMIPacket(rawpacket, 0, length); + if (newPacket.getPacketType().equals(TPMIPacket.PacketType.RESPONSE)) { + return newPacket; } } return null; diff --git a/src/main/java/iflytop/app/service/base/AppEventBusService.java b/src/main/java/iflytop/app/service/base/AppEventBusService.java deleted file mode 100644 index 181fc9f..0000000 --- a/src/main/java/iflytop/app/service/base/AppEventBusService.java +++ /dev/null @@ -1,79 +0,0 @@ -package iflytop.app.service.base; - -import iflytop.app.type.event.AppEvent; -import jakarta.annotation.PostConstruct; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * 事件总线 - */ -@Component -public class AppEventBusService implements ApplicationListener { - public static final Logger logger = LoggerFactory.getLogger(AppEventBusService.class); - - @FunctionalInterface - public interface AppEventListener { - void onAppEvent(AppEvent event); - } - - - Thread eventProcessorThread; - BlockingQueue eventQueue = new LinkedBlockingQueue<>(); - List listeners = new ArrayList<>(); - - @PostConstruct - public void init() { - - } - - public void regListener(AppEventListener listener) { - listeners.add(listener); - } - - public void pushEvent(AppEvent event) { -// logger.info("pushEvent: {} {}", event.getClass().getSimpleName(), event); - eventQueue.add(event); - } - - - private void eventBusSchedule() { - while (!Thread.currentThread().isInterrupted()) { - AppEvent event = null; - try { - event = eventQueue.take(); - } catch (InterruptedException ignored) { - } - callOnEvent(event); - } - } - - private void callOnEvent(AppEvent event) { - for (AppEventListener listener : listeners) { - listener.onAppEvent(event); - } - } - - @Override - public void onApplicationEvent(ContextRefreshedEvent event) { - logger.info("Spring context refreshed"); - if (eventProcessorThread == null) { - eventProcessorThread = new Thread(new Runnable() { - public void run() { - logger.info("Starting event bus schedule"); - eventBusSchedule(); - } - }); - eventProcessorThread.start(); - } - } - -} diff --git a/src/main/java/iflytop/app/service/base/EventBusService.java b/src/main/java/iflytop/app/service/base/EventBusService.java new file mode 100644 index 0000000..e83f595 --- /dev/null +++ b/src/main/java/iflytop/app/service/base/EventBusService.java @@ -0,0 +1,79 @@ +package iflytop.app.service.base; + +import iflytop.app.type.event.AppEvent; +import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 事件总线 + */ +@Component +public class EventBusService implements ApplicationListener { + public static final Logger logger = LoggerFactory.getLogger(EventBusService.class); + + @FunctionalInterface + public interface AppEventListener { + void onAppEvent(AppEvent event); + } + + + Thread eventProcessorThread; + BlockingQueue eventQueue = new LinkedBlockingQueue<>(); + List listeners = new ArrayList<>(); + + @PostConstruct + public void init() { + + } + + public void regListener(AppEventListener listener) { + listeners.add(listener); + } + + public void pushEvent(AppEvent event) { +// logger.info("pushEvent: {} {}", event.getClass().getSimpleName(), event); + eventQueue.add(event); + } + + + private void eventBusSchedule() { + while (!Thread.currentThread().isInterrupted()) { + AppEvent event = null; + try { + event = eventQueue.take(); + } catch (InterruptedException ignored) { + } + callOnEvent(event); + } + } + + private void callOnEvent(AppEvent event) { + for (AppEventListener listener : listeners) { + listener.onAppEvent(event); + } + } + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + logger.info("Spring context refreshed"); + if (eventProcessorThread == null) { + eventProcessorThread = new Thread(new Runnable() { + public void run() { + logger.info("Starting event bus schedule"); + eventBusSchedule(); + } + }); + eventProcessorThread.start(); + } + } + +} diff --git a/src/main/java/iflytop/app/service/base/GstateService.java b/src/main/java/iflytop/app/service/base/GstateService.java new file mode 100644 index 0000000..0a7097c --- /dev/null +++ b/src/main/java/iflytop/app/service/base/GstateService.java @@ -0,0 +1,7 @@ +package iflytop.app.service.base; + +import org.springframework.stereotype.Component; + +@Component +public class GstateService { +} diff --git a/src/main/java/iflytop/app/service/base/UIStateControlService.java b/src/main/java/iflytop/app/service/base/UIStateControlService.java new file mode 100644 index 0000000..5bd054c --- /dev/null +++ b/src/main/java/iflytop/app/service/base/UIStateControlService.java @@ -0,0 +1,13 @@ +package iflytop.app.service.base; + +/** + * + * 职责: + * 1. 弹窗 + * 2. 同步状态 + * 3. 上报事件 + * 4. 同步警报信息等状态 + * + */ +public class UIStateControlService { +} diff --git a/src/main/java/iflytop/app/service/base/WebSocketEndpointMgr.java b/src/main/java/iflytop/app/service/base/WebSocketEndpointMgr.java new file mode 100644 index 0000000..c93a933 --- /dev/null +++ b/src/main/java/iflytop/app/service/base/WebSocketEndpointMgr.java @@ -0,0 +1,99 @@ +package iflytop.app.service.base; + +import iflytop.app.utils.ZJsonHelper; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import jakarta.websocket.Session; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 当前项目所有WebSocket连接与上传管理 + */ + +@Component +@EnableScheduling +@Slf4j +public class WebSocketEndpointMgr { + + public static class Report { + public String messageType = "Report"; + public String dataType; + public Object data; + public Integer timestamp = (int) (System.currentTimeMillis() / 1000); + + public Report(String dataType, Object object) { + this.dataType = dataType; + this.data = object; + } + } + + @Resource + EventBusService eventBusService; + + + List stateWebsocketSessions = new ArrayList<>(); + List eventWebsocketSessions = new ArrayList<>(); + + synchronized public void pushStateWebsocketSession(Session session) { + stateWebsocketSessions.add(session); + } + + synchronized public void removeStateWebsocketSession(Session session) { + stateWebsocketSessions.remove(session); + } + + synchronized public void pushEventWebsocketSession(Session session) { + eventWebsocketSessions.add(session); + } + + synchronized public void removeEventWebsocketSession(Session session) { + eventWebsocketSessions.remove(session); + } + + synchronized void broadcastState(String message) { + for (Session session : stateWebsocketSessions) { + try { + session.getBasicRemote().sendText(message); + } catch (IOException | IllegalStateException e) { + log.warn("broadcastState: session.getBasicRemote().sendText() failed, ignore it"); + } + } + } + + synchronized void broadcastEvent(String message) { + for (Session session : eventWebsocketSessions) { + try { + session.getBasicRemote().sendText(message); + } catch (IOException | IllegalStateException e) { + log.warn("broadcastEvent: session.getBasicRemote().sendText() failed, ignore it"); + } + } + } + + @PostConstruct + public void init() { + } + + + synchronized public void reportState(String type, Object object) { + var message = ZJsonHelper.objectToJson(new Report(type, object)); + broadcastState(message); + } + + synchronized public void reportEvent(String type, Object object) { + var message = ZJsonHelper.objectToJson(new Report(type, object)); + broadcastEvent(message); + } + + // + // Scheduled tasks + // + + +}; diff --git a/src/main/java/iflytop/app/service/task/MeasurementTaskCtrlService.java b/src/main/java/iflytop/app/service/task/MeasurementTaskCtrlService.java index c868bfb..c9b7450 100644 --- a/src/main/java/iflytop/app/service/task/MeasurementTaskCtrlService.java +++ b/src/main/java/iflytop/app/service/task/MeasurementTaskCtrlService.java @@ -20,5 +20,29 @@ public class MeasurementTaskCtrlService { // reMeasure // + // + // + // + // + // 最终目的:出报告 + // + // 1. 建立链接(其他服务负责)? + // 2. -->开始测量(session)此时传过来一些模型,测量的数据,等数据 + // 3. <--右侧数据开始上报 + // 4. <--数据上报 + // 5. <--右侧数据上报结束 + // 6. <--左侧数据开始上报 + // 7. <--数据上报 + // 8. <--左侧数据上报结束 + // + // 10 ---> 分析数据(返回报告) + // 11 ---> 保存报告() + // + // + + public void startMeasurementTask() { + log.info("startMeasurementTask"); + //下发测量指令 + } } diff --git a/src/main/java/iflytop/app/service/ui/AppWebSocketEndpointMgr.java b/src/main/java/iflytop/app/service/ui/AppWebSocketEndpointMgr.java deleted file mode 100644 index 3d5583b..0000000 --- a/src/main/java/iflytop/app/service/ui/AppWebSocketEndpointMgr.java +++ /dev/null @@ -1,100 +0,0 @@ -package iflytop.app.service.ui; - -import iflytop.app.service.base.AppEventBusService; -import iflytop.app.utils.ZJsonHelper; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import jakarta.websocket.Session; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * 当前项目所有WebSocket连接与上传管理 - */ - -@Component -@EnableScheduling -@Slf4j -public class AppWebSocketEndpointMgr { - - public static class Report { - public String messageType = "Report"; - public String dataType; - public Object data; - public Integer timestamp = (int) (System.currentTimeMillis() / 1000); - - public Report(String dataType, Object object) { - this.dataType = dataType; - this.data = object; - } - } - - @Resource - AppEventBusService appEventBusService; - - - List stateWebsocketSessions = new ArrayList<>(); - List eventWebsocketSessions = new ArrayList<>(); - - synchronized public void pushStateWebsocketSession(Session session) { - stateWebsocketSessions.add(session); - } - - synchronized public void removeStateWebsocketSession(Session session) { - stateWebsocketSessions.remove(session); - } - - synchronized public void pushEventWebsocketSession(Session session) { - eventWebsocketSessions.add(session); - } - - synchronized public void removeEventWebsocketSession(Session session) { - eventWebsocketSessions.remove(session); - } - - synchronized void broadcastState(String message) { - for (Session session : stateWebsocketSessions) { - try { - session.getBasicRemote().sendText(message); - } catch (IOException | IllegalStateException e) { - log.warn("broadcastState: session.getBasicRemote().sendText() failed, ignore it"); - } - } - } - - synchronized void broadcastEvent(String message) { - for (Session session : eventWebsocketSessions) { - try { - session.getBasicRemote().sendText(message); - } catch (IOException | IllegalStateException e) { - log.warn("broadcastEvent: session.getBasicRemote().sendText() failed, ignore it"); - } - } - } - - @PostConstruct - public void init() { - } - - - synchronized public void reportState(String type, Object object) { - var message = ZJsonHelper.objectToJson(new Report(type, object)); - broadcastState(message); - } - - synchronized public void reportEvent(String type, Object object) { - var message = ZJsonHelper.objectToJson(new Report(type, object)); - broadcastEvent(message); - } - - // - // Scheduled tasks - // - - -}; diff --git a/src/main/java/iflytop/app/service/ui/UIStateControlService.java b/src/main/java/iflytop/app/service/ui/UIStateControlService.java deleted file mode 100644 index 860e572..0000000 --- a/src/main/java/iflytop/app/service/ui/UIStateControlService.java +++ /dev/null @@ -1,13 +0,0 @@ -package iflytop.app.service.ui; - -/** - * - * 职责: - * 1. 弹窗 - * 2. 同步状态 - * 3. 上报事件 - * 4. 同步警报信息等状态 - * - */ -public class UIStateControlService { -} diff --git a/src/main/java/iflytop/config/WebSocketConfiguration.java b/src/main/java/iflytop/config/WebSocketConfiguration.java new file mode 100644 index 0000000..adf7d41 --- /dev/null +++ b/src/main/java/iflytop/config/WebSocketConfiguration.java @@ -0,0 +1,13 @@ +package iflytop.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +public class WebSocketConfiguration { + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +}