Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.internal.transport.tcp;
00018
00019 import org.jboss.netty.channel.ChannelPipeline;
00020 import org.jboss.netty.channel.group.ChannelGroup;
00021 import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder;
00022 import org.jboss.netty.handler.codec.frame.LengthFieldPrepender;
00023 import org.ros.internal.node.service.ServiceManager;
00024 import org.ros.internal.node.topic.TopicParticipantManager;
00025
00029 public class TcpServerPipelineFactory extends ConnectionTrackingChannelPipelineFactory {
00030
00031 public static final String LENGTH_FIELD_BASED_FRAME_DECODER = "LengthFieldBasedFrameDecoder";
00032 public static final String LENGTH_FIELD_PREPENDER = "LengthFieldPrepender";
00033 public static final String HANDSHAKE_HANDLER = "HandshakeHandler";
00034
00035 private final TopicParticipantManager topicParticipantManager;
00036 private final ServiceManager serviceManager;
00037
00038 public TcpServerPipelineFactory(ChannelGroup channelGroup,
00039 TopicParticipantManager topicParticipantManager, ServiceManager serviceManager) {
00040 super(channelGroup);
00041 this.topicParticipantManager = topicParticipantManager;
00042 this.serviceManager = serviceManager;
00043 }
00044
00045 @Override
00046 public ChannelPipeline getPipeline() {
00047 ChannelPipeline pipeline = super.getPipeline();
00048 pipeline.addLast(LENGTH_FIELD_PREPENDER, new LengthFieldPrepender(4));
00049 pipeline.addLast(LENGTH_FIELD_BASED_FRAME_DECODER, new LengthFieldBasedFrameDecoder(
00050 Integer.MAX_VALUE, 0, 4, 0, 4));
00051 pipeline.addLast(HANDSHAKE_HANDLER, new TcpServerHandshakeHandler(topicParticipantManager,
00052 serviceManager));
00053 return pipeline;
00054 }
00055 }