| 
					
				 | 
			
			
				@@ -1,113 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-package com.ozs.web.core.config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.alibaba.fastjson2.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-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.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.ConcurrentHashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.concurrent.atomic.AtomicInteger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * @Author : sunhh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * @create 2023/3/2 14:57 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-@ServerEndpoint(value = "/serverForWebSocket/{userId}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-public class Server4WebSocket { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 存储登录用户的 sid 以及 session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static ConcurrentHashMap<String, Session> connections = new ConcurrentHashMap<>(32); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 是WebSocket的Session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private Session session; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 统计在线人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static AtomicInteger onlineCount = new AtomicInteger(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @OnOpen //事件 --登录的人.//当你登录之后建立连接,此方法便会执行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void onopen(@PathParam("userId") String userId, Session session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        this.session = session; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        System.out.println("seesionId为" + session.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (connections.containsKey(userId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            connections.remove(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            connections.put(userId, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            onlineCount.incrementAndGet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            connections.put(userId, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            System.out.println("用户:" + userId + "-" + session.getId() + "上线了-" + session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            System.out.println("在线人数:" + onlineCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String content = new JSONObject(connections).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        System.out.println("在线用户信息:" + content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @OnClose 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void onClose(Session session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (String userId : connections.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (connections.get(userId).equals(session)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                System.out.println("用户:" + userId + "-关闭-" + session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                connections.remove(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                onlineCount.decrementAndGet(); // 在线数减1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @OnMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void onMessage(String msg, Session session) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        System.out.println("服务端收到客户端" + session.getId() + "的消息:" + msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 客户端向服务端发送消息,然后再推送给其他的用户,可以在这里进行设置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sendMessage(msg, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    @OnError 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void onError(Session session, Throwable error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        System.out.println("发生错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        error.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void sendMessage(String msg, Session session) throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        for (Session session1 : webSocketSet) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            if (session != session1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                session1.getBasicRemote().sendText(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        System.out.println("推送:" + msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        session.getBasicRemote().sendText(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 推送给指定的用户群 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void sendMsgToUsers(List<String> ids) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ids.stream().forEach(s -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            System.out.println("用户:" + s + "是否能够推送:" + connections.containsKey(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (connections.containsKey(s)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (connections.get(s).isOpen()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        System.out.println("开始推送"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        sendMessage("hello:" + s, connections.get(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        throw new RuntimeException(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 推送给全部在线用户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void sendMsgToAll() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        connections.keySet().stream().forEach(s -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (connections.get(s).isOpen()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    System.out.println("开始推送"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sendMessage("hello:" + s, connections.get(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    throw new RuntimeException(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |