From f66b758cfa75ddaa7c50a8d6ba015e4af9c52c4a Mon Sep 17 00:00:00 2001
From: tangzy <tangzy123456>
Date: Tue, 23 Mar 2021 08:40:01 +0800
Subject: [PATCH] 1.webscoket

---
 blade-service/blade-jfpts/pom.xml                                                     |    9 ++++
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java |   75 +++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/blade-service/blade-jfpts/pom.xml b/blade-service/blade-jfpts/pom.xml
index b8415e3..6cea5f3 100644
--- a/blade-service/blade-jfpts/pom.xml
+++ b/blade-service/blade-jfpts/pom.xml
@@ -58,6 +58,15 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-oss-qiniu</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+            <version>2.0.4.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java
new file mode 100644
index 0000000..48a4010
--- /dev/null
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocket.java
@@ -0,0 +1,75 @@
+package org.springblade.jfpt.webscoket;
+
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint("/websocket/{pageCode}")
+@Component
+public class WebSocket {
+
+	private static final String loggerName=WebSocket.class.getName();
+	//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
+	public static Map<String, List<Session>> electricSocketMap = new ConcurrentHashMap<String, List<Session>>();
+
+	/**
+	 * 连接建立成功调用的方法
+	 *
+	 * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
+	 */
+	@OnOpen
+	public void onOpen(@PathParam("pageCode") String pageCode, Session session) {
+		List<Session> sessions = electricSocketMap.get(pageCode);
+		if(null==sessions){
+			List<Session> sessionList = new ArrayList<>();
+			sessionList.add(session);
+			electricSocketMap.put(pageCode,sessionList);
+		}else{
+			sessions.add(session);
+		}
+	}
+
+	/**
+	 * 连接关闭调用的方法
+	 */
+	@OnClose
+	public void onClose(@PathParam("pageCode") String pageCode,Session session) {
+		if (electricSocketMap.containsKey(pageCode)){
+			electricSocketMap.get(pageCode).remove(session);
+		}
+	}
+
+	/**
+	 * 收到客户端消息后调用的方法
+	 *
+	 * @param message 客户端发送过来的消息
+	 * @param session 可选的参数
+	 */
+	@OnMessage
+	public void onMessage(String message, Session session) {
+		System.out.println("websocket received message:"+message);
+		try {
+			session.getBasicRemote().sendText("这是推送测试数据!您刚发送的消息是:"+message);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 发生错误时调用
+	 *
+	 * @param session
+	 * @param error
+	 */
+	@OnError
+	public void onError(Session session, Throwable error) {
+		System.out.println("发生错误");;
+	}
+}

--
Gitblit v1.9.3