Package net.lightstone.net

Source Code of net.lightstone.net.MinecraftEncoder

package net.lightstone.net;

import java.io.IOException;

import net.lightstone.msg.Message;
import net.lightstone.net.codec.MessageCodec;

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.handler.codec.oneone.OneToOneEncoder;

/**
* A {@link OneToOneEncoder} which encodes Minecraft {@link Message}s into
* {@link ChannelBuffer}s.
*/
public class MinecraftEncoder extends OneToOneEncoder {

  @SuppressWarnings("unchecked")
  @Override
  protected Object encode(ChannelHandlerContext ctx, Channel c, Object msg) throws Exception {
    if (msg instanceof Message) {
      Message message = (Message) msg;

      Class<? extends Message> clazz = message.getClass();
      MessageCodec<Message> codec = (MessageCodec<Message>) CodecLookupService.find(clazz);
      if (codec == null) {
        throw new IOException("Unknown message type: " + clazz + ".");
      }

      ChannelBuffer opcodeBuf = ChannelBuffers.buffer(1);
      opcodeBuf.writeByte(codec.getOpcode());

      return ChannelBuffers.wrappedBuffer(opcodeBuf, codec.encode(message));
    }
    return msg;
  }

}
TOP

Related Classes of net.lightstone.net.MinecraftEncoder

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.