Procházet zdrojové kódy

add socket Listener

zhanghaijun před 2 roky
rodič
revize
f7f963e9b7

+ 6 - 1
train-common/train-common-websocket/src/main/java/top/haijunit/websocket/config/WebSocketConfig.java

@@ -1,9 +1,11 @@
 package top.haijunit.websocket.config;
 
 import cn.hutool.core.util.StrUtil;
+import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.web.socket.WebSocketHandler;
 import org.springframework.web.socket.config.annotation.EnableWebSocket;
@@ -21,8 +23,11 @@ import top.haijunit.websocket.handler.WebSocketTopicListener;
 @ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")
 @EnableConfigurationProperties(WebSocketProperties.class)
 @EnableWebSocket
+@RequiredArgsConstructor
 public class WebSocketConfig {
 
+    private final ApplicationContext applicationContext;
+
     @Bean
     public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor, WebSocketHandler webSocketHandler, WebSocketProperties webSocketProperties) {
         if (StrUtil.isBlank(webSocketProperties.getPath())) {
@@ -41,7 +46,7 @@ public class WebSocketConfig {
 
     @Bean
     public WebSocketHandler webSocketHandler() {
-        return new top.haijunit.websocket.handler.WebSocketHandler();
+        return new top.haijunit.websocket.handler.WebSocketHandler(applicationContext);
     }
 
     @Bean

+ 24 - 0
train-common/train-common-websocket/src/main/java/top/haijunit/websocket/event/MessageEvent.java

@@ -0,0 +1,24 @@
+package top.haijunit.websocket.event;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * @author zhang
+ * @date 2023/11/23 23:11
+ * @description [一句话描述该类的功能]
+ */
+@Getter
+@Setter
+@ToString
+public class MessageEvent extends ApplicationEvent {
+
+    private String message;
+
+    public MessageEvent(Object source, String message) {
+        super(source);
+        this.message = message;
+    }
+}

+ 12 - 3
train-common/train-common-websocket/src/main/java/top/haijunit/websocket/handler/WebSocketHandler.java

@@ -3,11 +3,13 @@ package top.haijunit.websocket.handler;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationContext;
 import org.springframework.web.socket.CloseStatus;
 import org.springframework.web.socket.PongMessage;
 import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
+import top.haijunit.websocket.event.MessageEvent;
 import top.haijunit.websocket.utils.WebSocketUtils;
 
 /**
@@ -18,6 +20,12 @@ import top.haijunit.websocket.utils.WebSocketUtils;
 @Slf4j
 public class WebSocketHandler extends AbstractWebSocketHandler {
 
+    private final ApplicationContext applicationContext;
+
+    public WebSocketHandler(ApplicationContext applicationContext) {
+        this.applicationContext = applicationContext;
+    }
+
     /** 连接成功后 */
     @Override
     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
@@ -27,9 +35,10 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     /** 处理发送来的文本消息 */
     @Override
     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
-        log.info("[websocket] 连接成功:" + session.getId() + ",已收到消息:" + message.getPayload());
-        String sessionId = Convert.toStr(session.getAttributes().get("loginUser"), "");
-        WebSocketUtils.sendMessage(sessionId, message.getPayload());
+        this.applicationContext.publishEvent(new MessageEvent(this, message.getPayload()));
+        // log.info("[websocket] 连接成功:" + session.getId() + ",已收到消息:" + message.getPayload());
+        // String sessionId = Convert.toStr(session.getAttributes().get("loginUser"), "");
+        WebSocketUtils.sendMessage(session, "收到消息");
     }
 
     /** 心跳监测的回复 */

+ 21 - 0
train-server/src/main/java/top/haijunit/train/listener/MessageEventListener.java

@@ -0,0 +1,21 @@
+package top.haijunit.train.listener;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+import top.haijunit.websocket.event.MessageEvent;
+
+/**
+ * @author zhang
+ * @date 2023/11/23 23:13
+ * @description [一句话描述该类的功能]
+ */
+@Slf4j
+@Component
+public class MessageEventListener implements ApplicationListener<MessageEvent> {
+
+    @Override
+    public void onApplicationEvent(MessageEvent event) {
+        System.out.println("收到消息:" + event);
+    }
+}