package net.jxta.impl.endpoint.netty; import net.jxta.endpoint.Message; import net.jxta.endpoint.WireFormatMessage; import net.jxta.endpoint.WireFormatMessageFactory; import net.jxta.impl.endpoint.msgframing.MessagePackageHeader; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelPipelineCoverage; import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; /** * Encodes a Message instance into the corresponding wire header and body, using the default * encoding for WireFormatMessageFactory. * * @author iain.mcginniss@onedrum.com */ @ChannelPipelineCoverage("all") public class JxtaMessageEncoder extends OneToOneEncoder { public static final String NAME = "jxtaMessageEncoder"; @Override protected Object encode(ChannelHandlerContext ctx, Channel channel, Object toEncode) throws Exception { Message message = (Message)toEncode; WireFormatMessage wireMessage = WireFormatMessageFactory.toWire(message, WireFormatMessageFactory.DEFAULT_WIRE_MIME, null); ChannelBuffer messageBytes = ChannelBuffers.wrappedBuffer(wireMessage.getByteBuffers()); MessagePackageHeader header = new MessagePackageHeader(); header.setContentLengthHeader(messageBytes.readableBytes()); header.setContentTypeHeader(WireFormatMessageFactory.DEFAULT_WIRE_MIME); SerializedMessage serialized = new SerializedMessage(header, messageBytes); return serialized; } }