Package org.menacheri.jetclient.handlers.netty

Source Code of org.menacheri.jetclient.handlers.netty.MessageBufferEventEncoder

package org.menacheri.jetclient.handlers.netty;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandler.Sharable;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
import org.menacheri.jetclient.communication.MessageBuffer;
import org.menacheri.jetclient.event.Event;

/**
* Converts an incoming {@link Event} which in turn has a
* IMessageBuffer<ChannelBuffer> payload to a Netty {@link ChannelBuffer}.
* <b>Note that {@link Event} instances containing other type of objects as its
* payload will result in {@link ClassCastException}.
*
* @author Abraham Menacherry.
*
*/
@Sharable
public class MessageBufferEventEncoder extends OneToOneEncoder
{

  @Override
  protected Object encode(ChannelHandlerContext ctx, Channel channel,
      Object msg) throws Exception
  {
    if (null == msg)
    {
      return msg;
    }
    Event event = (Event) msg;
    ChannelBuffer opCode = ChannelBuffers.buffer(1);
    opCode.writeByte(event.getType());
    ChannelBuffer buffer = null;
    if (null != event.getSource())
    {
      @SuppressWarnings("unchecked")
      MessageBuffer<ChannelBuffer> msgBuffer = (MessageBuffer<ChannelBuffer>) event
          .getSource();
      ChannelBuffer data = msgBuffer.getNativeBuffer();
      buffer = ChannelBuffers.wrappedBuffer(opCode, data);
    }
    else
    {
      buffer = opCode;
    }
    return buffer;
  }

}
TOP

Related Classes of org.menacheri.jetclient.handlers.netty.MessageBufferEventEncoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.