All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.fhframework.WebSocketConfiguration Maven / Gradle / Ivy

package pl.fhframework;

import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistration;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.List;

@Configuration
@EnableWebSocket
@Lazy
public class WebSocketConfiguration implements WebSocketConfigurer {
    @Value("${fh.web.socket.origins:}")
    private List websocketOrigins;

    @Getter
    @Value("${fh.web.socket.textBufferSize:262144}")
    private int textBufferSize;

    @Getter
    @Value("${fh.web.socket.sendTimeLimit:60000}")
    private int sendTimeLimit;

    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        WebSocketFormsHandler webSocketFormsHandler = applicationContext.getBean(WebSocketFormsHandler.class);
        WebSocketHandlerRegistration regWebClient = registry.addHandler(webSocketFormsHandler.getSocketHandler(), "socketForms");
        if (!websocketOrigins.isEmpty()) {
            regWebClient.setAllowedOrigins(websocketOrigins.toArray(new String[0]));
        }
        regWebClient.addInterceptors(new HttpSessionInterceptor());
    }

    @Bean
    public ServletContextInitializer initializer() {
        return new ServletContextInitializer() {
            @Override
            public void onStartup(ServletContext servletContext) throws ServletException {
                servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize", Integer.toString(textBufferSize));
            }
        };
    }

    /*@Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(262144);
        return container;
    }*/

    /*@Bean
    public HandlerMapping webSocketHandlerMapping() {
        ServletWebSocketHandlerRegistry registry = new ServletWebSocketHandlerRegistry(webSocketTaskScheduler());
        registerWebSocketHandlers(registry);
        return registry.getHandlerMapping();
    }*/

    @Bean
    public ThreadPoolTaskScheduler webSocketTaskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("WSHeartbeat");
        scheduler.setPoolSize(Runtime.getRuntime().availableProcessors());
        scheduler.setRemoveOnCancelPolicy(true);
        return scheduler;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy