Fixing ticket 89

This commit is contained in:
Viktor Klang 2009-12-29 20:12:46 +01:00
parent fb98c64c0c
commit c78e24ee52

View file

@ -131,6 +131,8 @@ class RemoteServer extends Logging {
} }
} }
case class Codec(encoder : ChannelHandler,decoder : ChannelHandler)
/** /**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/ */
@ -141,23 +143,23 @@ class RemoteServerPipelineFactory(
import RemoteServer._ import RemoteServer._
def getPipeline: ChannelPipeline = { def getPipeline: ChannelPipeline = {
val pipeline = Channels.pipeline()
RemoteServer.COMPRESSION_SCHEME match { val lenDec = new LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4)
case "zlib" => pipeline.addLast("zlibDecoder", new ZlibDecoder) val lenPrep = new LengthFieldPrepender(4)
//case "lzf" => pipeline.addLast("lzfDecoder", new LzfDecoder) val protobufDec = new ProtobufDecoder(RemoteRequest.getDefaultInstance)
case _ => {} // no compression val protobufEnc = new ProtobufEncoder
val remoteServer = new RemoteServerHandler(name, openChannels, loader)
val zipcodec = RemoteServer.COMPRESSION_SCHEME match {
case "zlib" => Some(Codec(new ZlibEncoder(RemoteServer.ZLIB_COMPRESSION_LEVEL),new ZlibDecoder))
//case "lzf" => Some(Codec(new LzfEncoder, new LzfDecoder))
case _ => None
} }
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4))
pipeline.addLast("protobufDecoder", new ProtobufDecoder(RemoteRequest.getDefaultInstance)) val stages : Array[ChannelHandler] = zipcodec.map( z => Array(z.decoder,lenDec,protobufDec,z.encoder,lenPrep,protobufEnc,remoteServer) )
RemoteServer.COMPRESSION_SCHEME match { .getOrElse(Array(lenDec,protobufDec,lenPrep,protobufEnc,remoteServer))
case "zlib" => pipeline.addLast("zlibEncoder", new ZlibEncoder(RemoteServer.ZLIB_COMPRESSION_LEVEL))
//case "lzf" => pipeline.addLast("lzfEncoder", new LzfEncoder) new StaticChannelPipeline(stages:_*)
case _ => {} // no compression
}
pipeline.addLast("frameEncoder", new LengthFieldPrepender(4))
pipeline.addLast("protobufEncoder", new ProtobufEncoder)
pipeline.addLast("handler", new RemoteServerHandler(name, openChannels, loader))
pipeline
} }
} }