package com.qianwen.core.websocket.config; import com.qianwen.core.websocket.custom.MasterlinkSessionKeyGenerator; import com.qianwen.core.websocket.custom.UserAttributeHandshakeInterceptor; import com.qianwen.core.websocket.handler.CustomPlanTextMessageHandler; import com.qianwen.core.websocket.handler.CustomWebSocketHandler; import com.qianwen.core.websocket.handler.PingJsonMessageHandler; import com.qianwen.core.websocket.handler.PlanTextMessageHandler; import com.qianwen.core.websocket.holder.MapSessionWebSocketHandlerDecorator; import com.qianwen.core.websocket.holder.SessionKeyGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; @EnableConfigurationProperties({WebSocketProperties.class}) public class WebSocketHandlerConfig { private final WebSocketProperties webSocketProperties; public WebSocketHandlerConfig(final WebSocketProperties webSocketProperties) { this.webSocketProperties = webSocketProperties; } @ConditionalOnMissingBean({SessionKeyGenerator.class}) @Bean public SessionKeyGenerator sessionKeyGenerator() { return new MasterlinkSessionKeyGenerator(); } @Bean public HandshakeInterceptor handshakeInterceptor() { return new UserAttributeHandshakeInterceptor(); } @ConditionalOnMissingBean({PlanTextMessageHandler.class}) @Bean public PlanTextMessageHandler planTextMessageHandler() { return new CustomPlanTextMessageHandler(); } @ConditionalOnMissingBean({TextWebSocketHandler.class, PlanTextMessageHandler.class}) @Bean public WebSocketHandler webSocketHandler1(@Autowired(required = false) SessionKeyGenerator sessionKeyGenerator) { CustomWebSocketHandler customWebSocketHandler = new CustomWebSocketHandler(); if (this.webSocketProperties.isMapSession()) { return new MapSessionWebSocketHandlerDecorator(customWebSocketHandler, sessionKeyGenerator); } return customWebSocketHandler; } @ConditionalOnMissingBean({TextWebSocketHandler.class}) @ConditionalOnBean({PlanTextMessageHandler.class}) @Bean public WebSocketHandler webSocketHandler2(@Autowired(required = false) SessionKeyGenerator sessionKeyGenerator, PlanTextMessageHandler planTextMessageHandler) { CustomWebSocketHandler customWebSocketHandler = new CustomWebSocketHandler(planTextMessageHandler); if (this.webSocketProperties.isMapSession()) { return new MapSessionWebSocketHandlerDecorator(customWebSocketHandler, sessionKeyGenerator); } return customWebSocketHandler; } @ConditionalOnProperty(prefix = WebSocketProperties.PREFIX, name = {"heartbeat"}, havingValue = "true", matchIfMissing = true) @Bean public PingJsonMessageHandler pingJsonMessageHandler() { return new PingJsonMessageHandler(); } }