1
zj
2024-08-07 7b73a544cec17c05b5931cf6c2b5cdf598e127b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package project.web.socketio;//package project.web.data.socketio;
//
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Map;
//import java.util.Set;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.DisposableBean;
//import org.springframework.beans.factory.InitializingBean;
//
//import com.corundumstudio.socketio.SocketIOClient;
//import com.corundumstudio.socketio.SocketIOServer;
//
//public class SocketIOService implements InitializingBean, DisposableBean {
//    private static final Logger logger = LoggerFactory.getLogger(SocketIOService.class);
//    
//    private SocketIOConfig SocketIOConfig;
//    private SocketIOServer socketIOServer;
//    
//    // 每个主题的订阅用户 topic --> set of clients
//    private Map<String, Set<SocketIOClient>> topicSubscribers = new HashMap<>();
//    
//    // 每个主题的最新消息 topic --> latest content
//    private Map<String, String> topicContent = new HashMap<>();
//   
//    @Override
//    public void afterPropertiesSet() {
//        socketIOServer = SocketIOConfig.socketIOServer();
//        
//        // 与前端建立连接
//        socketIOServer.addConnectListener(client -> {
//            if (null != client.getHandshakeData().getSingleUrlParam("user") 
//                    && null != client.getHandshakeData().getSingleUrlParam("subscriptions")) {
//                logger.info("user " + client.getHandshakeData().getSingleUrlParam("user") + " connected to socketio");
//                String subscriptions = client.getHandshakeData().getSingleUrlParam("subscriptions");
//                for (String topic : subscriptions.split(",")) {
//                    if (topicSubscribers.containsKey(topic)) {
//                        topicSubscribers.get(topic).add(client);
//                    } else {
//                        Set<SocketIOClient> s = new HashSet<>();
//                        s.add(client);
//                        topicSubscribers.put(topic, s);
//                    }
//                    if (topicContent.containsKey(topic)) {
//                        client.sendEvent("publish", topic, topicContent.get(topic));
//                    }
//                }
//            }
//        });
//        // 与前端断开连接
//        socketIOServer.addDisconnectListener(client -> {
//            if (null != client.getHandshakeData().getSingleUrlParam("user") 
//                    && null != client.getHandshakeData().getSingleUrlParam("subscriptions")) {
//                logger.info("user " + client.getHandshakeData().getSingleUrlParam("user") + " disconnected to socketio");
//                String subscriptions = client.getHandshakeData().getSingleUrlParam("subscriptions");
//                for (String topic : subscriptions.split(",")) {
//                    topicSubscribers.get(topic).remove(client);
//                }
//            }
//        });
//        socketIOServer.start();
//        logger.info("socketio started on port " + socketIOServer.getConfiguration().getPort());
//    }
//
//    @Override
//    public void destroy() {
//        if (null != socketIOServer) {
//            socketIOServer.stop();
//            logger.info("socketio stopped");
//        }
//    }
//
//    public void publish(String topic, String content) {
//        System.out.println("topic: " + topic);
//        System.out.println("content: " + content);
//        topicContent.put(topic, content);
//        System.out.println("11111111111111111111111111111" + topicSubscribers);
//        if (topicSubscribers.containsKey(topic)) {
//            for (SocketIOClient client : topicSubscribers.get(topic)) {
//                System.out.println("22222222222222222222222222222" + client);
//                client.sendEvent("publish", topic, content);
//            }
//        }
//    }
//
//    public void setSocketIOServer(SocketIOServer socketIOServer) {
//        this.socketIOServer = socketIOServer;
//    }
//
//    public void setSocketIOConfig(SocketIOConfig socketIOConfig) {
//        SocketIOConfig = socketIOConfig;
//    }
//    
//}