Package opensnap.config

Source Code of opensnap.config.WebSocketConfig

/*
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package opensnap.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import opensnap.security.SecurityChannelInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.messaging.simp.config.StompBrokerRelayRegistration;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;

import java.util.List;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

  private SecurityChannelInterceptor interceptor;

  private ObjectMapper mapper;

  @Value("${broker.enabled}")
  private boolean brokerEnabled;

  @Value("${broker.login}")
  private String brokerLogin;

  @Value("${broker.password}")
  private String brokerPassword;

  @Value("${broker.host}")
  private String brokerHost;

  @Value("${broker.port}")
  private int brokerPort;

  @Value("${broker.virtual-host}")
  private String brokerVirtualHost;


  @Autowired
  public void setInterceptor(SecurityChannelInterceptor interceptor) {
    this.interceptor = interceptor;
  }

  @Autowired
  public void setMapper(ObjectMapper mapper) {
    this.mapper = mapper;
  }

  @Override
  public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
    registration.setMessageSizeLimit(1024 * 1024);
  }

  @Override
  public void configureClientInboundChannel(ChannelRegistration registration) {
    this.interceptor.loadConfiguration("security.yml");
    registration.setInterceptors(this.interceptor).taskExecutor().corePoolSize(1).maxPoolSize(1);
  }



  @Override
  public void configureClientOutboundChannel(ChannelRegistration registration) {
    registration.taskExecutor().corePoolSize(1).maxPoolSize(1);
  }

  @Override
  public void configureMessageBroker(MessageBrokerRegistry config) {
    config.setApplicationDestinationPrefixes("/app");
    if(brokerEnabled) {
      StompBrokerRelayRegistration brokerRegistration = config.enableStompBrokerRelay("/queue", "/topic")
          .setSystemLogin(brokerLogin).setSystemPasscode(brokerPassword).setClientLogin(brokerLogin)
            .setClientPasscode(brokerPassword).setRelayHost(brokerHost).setRelayPort(brokerPort);
      if(!brokerVirtualHost.equals("")) {
        brokerRegistration.setVirtualHost(brokerVirtualHost);
      }
    } else {
      config.enableSimpleBroker("/queue", "/topic");
    }
  }

  @Override
  public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/sockjs").setHandshakeHandler(new CustomHandshakeHandler()).withSockJS();
  }

  @Override
  public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setObjectMapper(mapper);
    messageConverters.add(converter);
    return false;
  }

}
TOP

Related Classes of opensnap.config.WebSocketConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.