/* * Copyright 2015 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 org.springframework.cloud.stream.module.tcp.source; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.stream.annotation.Bindings; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; import org.springframework.cloud.stream.module.tcp.EncoderDecoderFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.integration.ip.config.TcpConnectionFactoryFactoryBean; import org.springframework.integration.ip.tcp.TcpReceivingChannelAdapter; import org.springframework.integration.ip.tcp.connection.AbstractConnectionFactory; import org.springframework.integration.ip.tcp.serializer.AbstractByteArraySerializer; /** * A source module that receives data over TCP. * * @author Gary Russell */ @EnableBinding(Source.class) @EnableConfigurationProperties(TcpSourceProperties.class) public class TcpSource { @Autowired @Bindings(TcpSource.class) private Source channels; @Autowired private TcpSourceProperties properties; @Bean public TcpReceivingChannelAdapter adapter( @Qualifier("tcpSourceConnectionFactory") AbstractConnectionFactory connectionFactory) { TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter(); adapter.setConnectionFactory(connectionFactory); adapter.setOutputChannel(this.channels.output()); return adapter; } @Bean public TcpConnectionFactoryFactoryBean tcpSourceConnectionFactory( @Qualifier("tcpSourceDecoder") AbstractByteArraySerializer decoder) throws Exception { TcpConnectionFactoryFactoryBean factoryBean = new TcpConnectionFactoryFactoryBean(); factoryBean.setType("server"); factoryBean.setPort(this.properties.getPort()); factoryBean.setUsingNio(this.properties.isNio()); factoryBean.setUsingDirectBuffers(this.properties.isUseDirectBuffers()); factoryBean.setLookupHost(this.properties.isReverseLookup()); factoryBean.setDeserializer(decoder); factoryBean.setSoTimeout(this.properties.getSocketTimeout()); return factoryBean; } @Bean public EncoderDecoderFactoryBean tcpSourceDecoder() { EncoderDecoderFactoryBean factoryBean = new EncoderDecoderFactoryBean(this.properties.getDecoder()); factoryBean.setMaxMessageSize(this.properties.getBufferSize()); return factoryBean; } }