Slide 104
Slide 104 text
In Netty, add a decoder to the Pipeline
protected[mongodb] class ReplyMessageDecoder extends LengthFieldBasedFrameDecoder(1024
* 1024 * 4, 0, 4, -4, 0) with Logging {
protected override def decode(ctx: ChannelHandlerContext, channel: Channel, buffer:
ChannelBuffer): AnyRef = {
val frame = super.decode(ctx, channel, buffer).asInstanceOf[ChannelBuffer]
if (frame == null) {
// don't have the whole message yet; netty will retry later
null
} else {
// we have one message (and nothing else) in the "frame" buffer
MongoMessage.unapply(new ChannelBufferInputStream(frame)) match {
case reply: ReplyMessage 㱺
reply
case default 㱺
// this should not happen;
throw new Exception("Unknown message type '%s' incoming from MongoDB;
ignoring.".format(default))
}
}
}
Friday, March 9, 12