package org.starmod.net.pipeline;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageCodec;
import org.starmod.net.*;
import java.util.List;
public class CodecHandler extends MessageToMessageCodec<ByteBuf, Command> {
private final NetworkServer server;
public CodecHandler(NetworkServer server) {
this.server = server;
}
@Override
protected void encode(ChannelHandlerContext ctx, Command cmd, List<Object> out) throws Exception {
final Codec codec = server.getCommandMap().getCodec(cmd.getHeader().getCommandId());
ByteBuf cmdBuf = ctx.alloc().buffer();
cmdBuf = codec.encode(cmdBuf, cmd);
ByteBuf headerBuf = ctx.alloc().buffer(Header.SIZE);
headerBuf = cmd.getHeader().encode(headerBuf);
out.add(Unpooled.wrappedBuffer(headerBuf, cmdBuf));
}
@Override
protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf buf, List<Object> out) throws Exception {
Header header = Header.decode(buf);
System.out.println("New Incoming Packet " + header.getPacketId() + " Command ID: " + header.getCommandId() + " Type: " + header.getCommandType()); // Debugging
final Codec codec = server.getCommandMap().getCodec(header.getCommandId());
Command cmd = codec.decode(buf, header);
out.add(cmd);
}
}