From c937e665ccbb763968d30ef2fad61c9eb935abfe Mon Sep 17 00:00:00 2001 From: whycq <123456> Date: 星期四, 02 五月 2024 10:29:43 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/phpswcs' into phpswcs --- src/main/java/com/zy/common/config/WebSocketConfig.java | 24 ++++++ src/main/java/com/zy/common/model/WebSocketMessage.java | 14 +++ src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java | 150 +++++++++++++++++++++++++++++++++++++ pom.xml | 4 + 4 files changed, 192 insertions(+), 0 deletions(-) diff --git a/pom.xml b/pom.xml index 354121d..4a2f68e 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,10 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-websocket</artifactId> + </dependency> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-tomcat</artifactId>--> diff --git a/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java new file mode 100644 index 0000000..dedc11b --- /dev/null +++ b/src/main/java/com/zy/asrs/ws/ConsoleWebSocket.java @@ -0,0 +1,150 @@ +package com.zy.asrs.ws; + +import com.alibaba.fastjson.JSON; +import com.zy.common.model.WebSocketMessage; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import javax.websocket.*; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.HashMap; +import java.util.concurrent.CopyOnWriteArraySet; + +@Component +@Slf4j +@Service +@ServerEndpoint("/console/websocket") +@Data +public class ConsoleWebSocket { + + //瀹㈡埛绔湪绾夸汉鏁� + private static int onlineClient = 0; + + //瀹㈡埛绔睜 + private static CopyOnWriteArraySet<ConsoleWebSocket> webSocketServers = new CopyOnWriteArraySet<>(); + + private Session session; + + //鏄惁閴存潈锛岄粯璁ゆ湭閴存潈 + private boolean auth = false; + + //鏄惁涓虹鐞嗗憳 + private boolean isAdmin = false; + + //绠¢亾ID + private String sessionId; + + @OnOpen + public void onOpen(Session session) { + this.session = session; + this.sessionId = session.getId(); + + //灏唚ebsocket瀵硅薄杩涜淇濆瓨 + webSocketServers.add(this); + //娣诲姞鍦ㄧ嚎浜烘暟 + addOnlineClient(); + log.info("鏈夋柊绐楀彛寮�濮嬬洃鍚�:" + session.getId() + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineClient()); + } + + /** + * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉� + */ + @OnClose + public void onClose() { + webSocketServers.remove(this); //浠巗et涓垹闄� + subOnlineClient(); //鍦ㄧ嚎鏁板噺1 + log.info("鍏抽棴鐨勮繛鎺ワ細" + sessionId); + log.info("鏈変竴杩炴帴鍏抽棴锛佸綋鍓嶅湪绾夸汉鏁颁负" + getOnlineClient()); + } + + /** + * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉� + * @ Param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅 + */ + @OnMessage + public void onMessage(String message, Session session) throws IOException { + WebSocketMessage socketMessage = JSON.parseObject(message, WebSocketMessage.class); + if (socketMessage.getUrl().equals("getTvConfig")) { + int tvNo = Integer.parseInt(socketMessage.getData()); + if (tvNo == 1) { + HashMap<String, Object> map = new HashMap<>(); + map.put("ip", "127.0.0.1"); + map.put("port", "111"); + socketMessage.setResult(JSON.toJSONString(map)); + this.sendMessage(JSON.toJSONString(socketMessage)); + } + } +// log.info("鏀跺埌鏉ヨ嚜杩炴帴锛�" + sessionId + "鐨勪俊鎭�:" + message); + } + + /** + * @ Param session + * @ Param error + */ + @OnError + public void onError(Session session, Throwable error) { + log.error("鍙戠敓閿欒"); + error.printStackTrace(); + } + + /** + * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫� + */ + public void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public void sendMessage(String message, String account) throws IOException { + for (ConsoleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + public void sendMessage(String message, int userId) throws IOException { + for (ConsoleWebSocket item : webSocketServers) { + item.sendMessage(message); + } + } + + /** + * 鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佺粰鎸囧畾鐢ㄦ埛 + */ + public static boolean sendMessageGlobal(String message, String account) throws IOException { + boolean tag = false; + for (ConsoleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static boolean sendMessageGlobal(String message, int userId) throws IOException { + boolean tag = false; + for (ConsoleWebSocket item : webSocketServers) { + tag = true; + item.sendMessage(message); + } + return tag; + } + + public static synchronized int getOnlineClient() { + return onlineClient; + } + + public static synchronized void addOnlineClient() { + ConsoleWebSocket.onlineClient++; + } + + public static synchronized void subOnlineClient() { + if (ConsoleWebSocket.onlineClient > 0) { + ConsoleWebSocket.onlineClient--; + } + } + +} diff --git a/src/main/java/com/zy/common/config/WebSocketConfig.java b/src/main/java/com/zy/common/config/WebSocketConfig.java new file mode 100644 index 0000000..32c1bd6 --- /dev/null +++ b/src/main/java/com/zy/common/config/WebSocketConfig.java @@ -0,0 +1,24 @@ +package com.zy.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/api/socket"); + } +} + diff --git a/src/main/java/com/zy/common/model/WebSocketMessage.java b/src/main/java/com/zy/common/model/WebSocketMessage.java new file mode 100644 index 0000000..d3c37ca --- /dev/null +++ b/src/main/java/com/zy/common/model/WebSocketMessage.java @@ -0,0 +1,14 @@ +package com.zy.common.model; + +import lombok.Data; + +@Data +public class WebSocketMessage { + + private String url; + + private String data; + + private String result; + +} -- Gitblit v1.9.1