From 7106ba7df798192705b41f3661b4256a49a410c1 Mon Sep 17 00:00:00 2001 From: lare96 Date: Tue, 19 Jan 2016 20:22:49 -0500 Subject: [PATCH] Use MessageToByte vs MessageToMessage encoders * Refactors GamePacketEncoder and LoginEncoder to extend from MessageToByteEncoder instead of MessageToMessageEncoder. --- .../net/codec/game/GamePacketEncoder.java | 26 ++++++------------- .../apollo/net/codec/login/LoginEncoder.java | 19 +++++--------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/net/src/main/org/apollo/net/codec/game/GamePacketEncoder.java b/net/src/main/org/apollo/net/codec/game/GamePacketEncoder.java index 89cb51f8..508cbb1f 100644 --- a/net/src/main/org/apollo/net/codec/game/GamePacketEncoder.java +++ b/net/src/main/org/apollo/net/codec/game/GamePacketEncoder.java @@ -1,21 +1,17 @@ package org.apollo.net.codec.game; import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageEncoder; - -import java.util.List; - +import io.netty.handler.codec.MessageToByteEncoder; import org.apollo.net.meta.PacketType; import org.apollo.util.security.IsaacRandom; /** - * A {@link MessageToMessageEncoder} which encodes in-game packets. + * A {@link MessageToByteEncoder} which encodes in-game packets. * * @author Graham */ -public final class GamePacketEncoder extends MessageToMessageEncoder { +public final class GamePacketEncoder extends MessageToByteEncoder { /** * The random number generator. @@ -32,32 +28,26 @@ public final class GamePacketEncoder extends MessageToMessageEncoder } @Override - protected void encode(ChannelHandlerContext ctx, GamePacket packet, List out) throws Exception { + protected void encode(ChannelHandlerContext ctx, GamePacket packet, ByteBuf out) throws Exception { PacketType type = packet.getType(); - int headerLength = 1; int payloadLength = packet.getLength(); if (type == PacketType.VARIABLE_BYTE) { - headerLength++; if (payloadLength >= 256) { throw new Exception("Payload too long for variable byte packet."); } } else if (type == PacketType.VARIABLE_SHORT) { - headerLength += 2; if (payloadLength >= 65_536) { throw new Exception("Payload too long for variable short packet."); } } - ByteBuf buffer = Unpooled.buffer(headerLength + payloadLength); - buffer.writeByte(packet.getOpcode() + random.nextInt() & 0xFF); + out.writeByte(packet.getOpcode() + random.nextInt() & 0xFF); if (type == PacketType.VARIABLE_BYTE) { - buffer.writeByte(payloadLength); + out.writeByte(payloadLength); } else if (type == PacketType.VARIABLE_SHORT) { - buffer.writeShort(payloadLength); + out.writeShort(payloadLength); } - buffer.writeBytes(packet.getPayload()); - - out.add(buffer); + out.writeBytes(packet.getPayload()); } } \ No newline at end of file diff --git a/net/src/main/org/apollo/net/codec/login/LoginEncoder.java b/net/src/main/org/apollo/net/codec/login/LoginEncoder.java index 7ce64aa5..466f11c5 100644 --- a/net/src/main/org/apollo/net/codec/login/LoginEncoder.java +++ b/net/src/main/org/apollo/net/codec/login/LoginEncoder.java @@ -2,16 +2,14 @@ package org.apollo.net.codec.login; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageEncoder; - -import java.util.List; +import io.netty.handler.codec.MessageToByteEncoder; /** - * A {@link MessageToMessageEncoder} which encodes login response messages. + * A {@link MessageToByteEncoder} which encodes login response messages. * * @author Graham */ -public final class LoginEncoder extends MessageToMessageEncoder { +public final class LoginEncoder extends MessageToByteEncoder { /** * Creates the login encoder. @@ -21,16 +19,13 @@ public final class LoginEncoder extends MessageToMessageEncoder { } @Override - protected void encode(ChannelHandlerContext ctx, LoginResponse response, List out) { - ByteBuf buffer = ctx.alloc().buffer(3); - buffer.writeByte(response.getStatus()); + protected void encode(ChannelHandlerContext ctx, LoginResponse response, ByteBuf out) { + out.writeByte(response.getStatus()); if (response.getStatus() == LoginConstants.STATUS_OK) { - buffer.writeByte(response.getRights()); - buffer.writeByte(response.isFlagged() ? 1 : 0); + out.writeByte(response.getRights()); + out.writeByte(response.isFlagged() ? 1 : 0); } - - out.add(buffer); } } \ No newline at end of file