package org.sdnplatform.sync.internal.rpc;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.handler.timeout.ReadTimeoutHandler;
import io.netty.util.Timer;
import org.sdnplatform.sync.internal.SyncManager;
/**
* Pipeline factory for the sync service.
* @see SyncManager
* @author readams
*/
public class RPCChannelInitializer extends ChannelInitializer<Channel> {
protected SyncManager syncManager;
protected RPCService rpcService;
protected Timer timer;
private static final int maxFrameSize = 512 * 1024;
public RPCChannelInitializer(SyncManager syncManager,
RPCService rpcService,
Timer timer) {
super();
this.syncManager = syncManager;
this.rpcService = rpcService;
this.timer = timer;
}
@Override
protected void initChannel(Channel ch) throws Exception {
RPCChannelHandler channelHandler =
new RPCChannelHandler(syncManager, rpcService);
IdleStateHandler idleHandler =
new IdleStateHandler(5, 10, 0);
ReadTimeoutHandler readTimeoutHandler =
new ReadTimeoutHandler(30);
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("idle", idleHandler);
pipeline.addLast("timeout", readTimeoutHandler);
pipeline.addLast("handshaketimeout",
new HandshakeTimeoutHandler(channelHandler, timer, 10));
pipeline.addLast("syncMessageDecoder",
new SyncMessageDecoder(maxFrameSize));
pipeline.addLast("syncMessageEncoder",
new SyncMessageEncoder());
pipeline.addLast("handler", channelHandler);
}
}