yangys
2024-05-18 c9b04383c77f91ac309e37e70783edcf8a9298b5
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
package com.qianwen.smartman.common.websocket.realtime;
 
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.qianwen.core.websocket.custom.SubscriptionSessionFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
 
@Component
public class RealTimeDataJsonSubscriptionFilter implements SubscriptionSessionFilter<RealTimeDataRequestJsonWebSocketMessage> {
    private static Map<String, RealTimeDataRequestJsonWebSocketMessage> map = new HashMap<>();
 
    public String type() {
        return "realTimeData";
    }
 
    public void onMessage(WebSocketSession session, RealTimeDataRequestJsonWebSocketMessage webSocketMessage) {
        map.put(session.getId(), webSocketMessage);
    }
 
    public List<String> onResponse(String messageText) {
        RealTimeDaraResponseJsonWebSocketMessage responseMessage = (RealTimeDaraResponseJsonWebSocketMessage) JSONObject.parseObject(messageText, RealTimeDaraResponseJsonWebSocketMessage.class);
        return map.keySet().stream().filter(key -> {
            return map.get(key).getWorkstationIdList() == null || map.get(key).getWorkstationIdList().isEmpty() || (map.get(key).getWorkstationIdList().contains(responseMessage.getId()) && responseMessage.getType().equals(map.get(key).getType()));
        }).collect(Collectors.toList());
    }
 
    public void onClose(WebSocketSession session) {
        map.remove(session.getId());
    }
}