yangys
2024-05-19 9e5da8899bc21bb5b6b0a3c267108caa00199291
websocket代码整理
已修改8个文件
30 ■■■■ 文件已修改
smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/realtime/RealTimeDataJsonMessageHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/realtime/RealTimeDataRequestJsonWebSocketMessage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/config/WebSocketAutoConfiguration.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/custom/DefaultTypeSessionFilter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/custom/UserAttributeHandshakeInterceptor.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/handler/CustomWebSocketHandler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/holder/MapSessionWebSocketHandlerDecorator.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/holder/WebSocketSessionHolder.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/realtime/RealTimeDataJsonMessageHandler.java
@@ -13,6 +13,9 @@
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
/**
 * 实现了websocket模块中的JsonMessageHandler,实时看板使用该处理器,payload中应该携带type:"realTimeData"属性
 */
@Component
public class RealTimeDataJsonMessageHandler implements JsonMessageHandler<RealTimeDataRequestJsonWebSocketMessage> {
    private final IOrderWorkstationService orderWorkstationService;
@@ -37,10 +40,11 @@
        }
    }
    @Override
    public String type() {
        return "realTimeData";
    }
    @Override
    public Class<RealTimeDataRequestJsonWebSocketMessage> getMessageClass() {
        return RealTimeDataRequestJsonWebSocketMessage.class;
    }
smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/realtime/RealTimeDataRequestJsonWebSocketMessage.java
@@ -3,6 +3,9 @@
import java.util.List;
import com.qianwen.core.websocket.message.AbstractJsonWebSocketMessage;
/**
 * 实时看板中的返回信息:workstationIdList,涉及状态,运行时间等信息
 */
public class RealTimeDataRequestJsonWebSocketMessage extends AbstractJsonWebSocketMessage {
    private List<String> workstationIdList;
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/config/WebSocketAutoConfiguration.java
@@ -33,7 +33,9 @@
    @Bean
    public WebSocketConfigurer webSocketConfigurer(List<HandshakeInterceptor> handshakeInterceptor, WebSocketHandler webSocketHandler) {
        return registry -> {
            //普通websocket支持
            registry.addHandler(webSocketHandler, new String[]{this.webSocketProperties.getPath()}).setAllowedOrigins(new String[]{this.webSocketProperties.getAllowOrigins()}).addInterceptors((HandshakeInterceptor[]) handshakeInterceptor.toArray(new HandshakeInterceptor[0]));
            //提供降级为SockJS的支持
            registry.addHandler(webSocketHandler, new String[]{this.webSocketProperties.getSockJsPath()}).setAllowedOrigins(new String[]{this.webSocketProperties.getAllowOrigins()}).addInterceptors((HandshakeInterceptor[]) handshakeInterceptor.toArray(new HandshakeInterceptor[0])).withSockJS();
        };
    }
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/custom/DefaultTypeSessionFilter.java
@@ -32,7 +32,7 @@
        }).collect(Collectors.toList());
    }
    @Override // com.qianwen.core.websocket.custom.SubscriptionSessionFilter
    @Override
    public void onClose(WebSocketSession session) {
    }
}
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/custom/UserAttributeHandshakeInterceptor.java
@@ -10,6 +10,7 @@
import org.springframework.web.socket.server.HandshakeInterceptor;
public class UserAttributeHandshakeInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> attributes) throws Exception {
        BladeUser user = AuthUtil.getUser();
        if (Func.isEmpty(user)) {
@@ -18,7 +19,7 @@
        attributes.put("USER_KEY_ATTR_NAME", user);
        return true;
    }
    @Override
    public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
    }
}
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/handler/CustomWebSocketHandler.java
@@ -32,6 +32,7 @@
        this.planTextMessageHandler = planTextMessageHandler;
    }
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws JsonProcessingException {
        if (message.getPayloadLength() == 0) {
            return;
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/holder/MapSessionWebSocketHandlerDecorator.java
@@ -5,6 +5,9 @@
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
/**
 * 一个WebSocketHandler,(装饰器模式),处理WebSocketSession的存取和关闭
 */
public class MapSessionWebSocketHandlerDecorator extends WebSocketHandlerDecorator {
    private final SessionKeyGenerator sessionKeyGenerator;
smart-starter-websocket/src/main/java/com/qianwen/core/websocket/holder/WebSocketSessionHolder.java
@@ -7,9 +7,11 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import org.springframework.web.socket.WebSocketSession;
/**
 * websocketsession存取
 */
public class WebSocketSessionHolder {
    private static final Map<Object, Set<WebSocketSession>> USER_SESSION_MAP = new ConcurrentHashMap();
    private static final Map<Object, Set<WebSocketSession>> USER_SESSION_MAP = new ConcurrentHashMap<>();
    private WebSocketSessionHolder() {
    }
@@ -32,9 +34,7 @@
    }
    public static Collection<WebSocketSession> getSessions() {
        return (Collection) USER_SESSION_MAP.values().stream().flatMap((v0) -> {
            return v0.stream();
        }).collect(Collectors.toList());
        return USER_SESSION_MAP.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
    }
    public static Set<Object> SessionKeys() {