package net.scapeemulator.game.net.game; import io.netty.buffer.MessageBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; import java.io.IOException; import net.scapeemulator.game.msg.CodecRepository; import net.scapeemulator.game.msg.Message; import net.scapeemulator.game.msg.MessageDecoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class GameMessageDecoder extends MessageToMessageDecoder<GameFrame> { private static final Logger logger = LoggerFactory.getLogger(GameMessageDecoder.class); private final CodecRepository codecs; public GameMessageDecoder(CodecRepository codecs) { this.codecs = codecs; } @SuppressWarnings("unchecked") @Override public void decode(ChannelHandlerContext ctx, GameFrame frame, MessageBuf<Object> out) throws IOException { MessageDecoder<Message> decoder = (MessageDecoder<Message>) codecs.get(frame.getOpcode()); if (decoder == null) { logger.warn("No decoder for packet id " + frame.getOpcode() + "."); return; } out.add(decoder.decode(frame)); } }