package com.asteria.net.codec; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import com.asteria.net.ISAACCipher; import com.asteria.net.message.MessageBuilder; /** * The {@link MessageToByteEncoder} implementation that encodes and queues the * game logic for all outgoing {@link MessageBuilder}s. * * @author lare96 <http://github.org/lare96> */ public final class MessageEncoder extends MessageToByteEncoder<MessageBuilder> { /** * The ISAAC that will encrypt outgoing messages. */ private final ISAACCipher encryptor; /** * Creates a new {@link MessageEncoder}. * * @param encryptor * the ISAAC that will encrypt outgoing messages. */ public MessageEncoder(ISAACCipher encryptor) { this.encryptor = encryptor; } @Override protected void encode(ChannelHandlerContext ctx, MessageBuilder msg, ByteBuf out) throws Exception { // Generate a new encryption key using ISAAC, encode the message and // write it to the client. ByteBuf internal = msg.buffer(); int value = internal.getByte(0) + encryptor.getKey(); internal.setByte(0, value); out.writeBytes(internal); } }