package com.qianwen.core.websocket.config;
|
|
import java.util.List;
|
import javax.annotation.PostConstruct;
|
import com.qianwen.core.websocket.custom.SubscriptionSessionFilter;
|
import com.qianwen.core.websocket.handler.JsonMessageHandler;
|
import com.qianwen.core.websocket.holder.JsonMessageFilterHolder;
|
import com.qianwen.core.websocket.holder.JsonMessageHandlerHolder;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Import;
|
import org.springframework.web.socket.WebSocketHandler;
|
import org.springframework.web.socket.config.annotation.EnableWebSocket;
|
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
import org.springframework.web.socket.server.HandshakeInterceptor;
|
|
@Configuration
|
@Import({WebSocketHandlerConfig.class})
|
@EnableWebSocket
|
public class WebSocketAutoConfiguration {
|
private final WebSocketProperties webSocketProperties;
|
private final List<JsonMessageHandler> jsonMessageHandlerList;
|
private final List<SubscriptionSessionFilter> jsonMessageFilterList;
|
|
public WebSocketAutoConfiguration(final WebSocketProperties webSocketProperties, final List<JsonMessageHandler> jsonMessageHandlerList, final List<SubscriptionSessionFilter> jsonMessageFilterList) {
|
this.webSocketProperties = webSocketProperties;
|
this.jsonMessageHandlerList = jsonMessageHandlerList;
|
this.jsonMessageFilterList = jsonMessageFilterList;
|
}
|
|
@ConditionalOnMissingBean
|
@Bean
|
public WebSocketConfigurer webSocketConfigurer(List<HandshakeInterceptor> handshakeInterceptor, WebSocketHandler webSocketHandler) {
|
return registry -> {
|
registry.addHandler(webSocketHandler, new String[]{this.webSocketProperties.getPath()}).setAllowedOrigins(new String[]{this.webSocketProperties.getAllowOrigins()}).addInterceptors((HandshakeInterceptor[]) handshakeInterceptor.toArray(new HandshakeInterceptor[0]));
|
registry.addHandler(webSocketHandler, new String[]{this.webSocketProperties.getSockJsPath()}).setAllowedOrigins(new String[]{this.webSocketProperties.getAllowOrigins()}).addInterceptors((HandshakeInterceptor[]) handshakeInterceptor.toArray(new HandshakeInterceptor[0])).withSockJS();
|
};
|
}
|
|
@PostConstruct
|
public void initJsonMessageHandlerHolder() {
|
for (JsonMessageHandler jsonMessageHandler : this.jsonMessageHandlerList) {
|
JsonMessageHandlerHolder.addHandler(jsonMessageHandler);
|
}
|
for (SubscriptionSessionFilter filter : this.jsonMessageFilterList) {
|
JsonMessageFilterHolder.addFilter(filter);
|
}
|
}
|
}
|