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());
|
}
|
}
|