package org.sdnplatform.sync.internal.remote; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.Channels; import org.jboss.netty.util.ExternalResourceReleasable; import org.jboss.netty.util.HashedWheelTimer; import org.jboss.netty.util.Timer; import org.sdnplatform.sync.internal.rpc.ThriftFrameDecoder; import org.sdnplatform.sync.internal.rpc.ThriftFrameEncoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Pipeline factory for the remote sync service * @author readams */ public class RemoteSyncPipelineFactory implements ChannelPipelineFactory, ExternalResourceReleasable { protected static final Logger logger = LoggerFactory.getLogger(RemoteSyncPipelineFactory.class.getName()); protected RemoteSyncManager syncManager; protected Timer timer; private static final int maxFrameSize = 1024 * 1024 * 10; public RemoteSyncPipelineFactory(RemoteSyncManager syncManager) { super(); this.syncManager = syncManager; this.timer = new HashedWheelTimer(); } @Override public ChannelPipeline getPipeline() throws Exception { RemoteSyncChannelHandler channelHandler = new RemoteSyncChannelHandler(syncManager); ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("frameDecoder", new ThriftFrameDecoder(maxFrameSize)); pipeline.addLast("frameEncoder", new ThriftFrameEncoder()); pipeline.addLast("timeout", new RSHandshakeTimeoutHandler(channelHandler, timer, 3)); pipeline.addLast("handler", channelHandler); return pipeline; } @Override public void releaseExternalResources() { timer.stop(); } }