mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-06 08:40:03 +00:00
Merge pull request #123 from lare96/master
This commit is contained in:
@@ -1,21 +1,17 @@
|
|||||||
package org.apollo.net.codec.game;
|
package org.apollo.net.codec.game;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.MessageToMessageEncoder;
|
import io.netty.handler.codec.MessageToByteEncoder;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apollo.net.meta.PacketType;
|
import org.apollo.net.meta.PacketType;
|
||||||
import org.apollo.util.security.IsaacRandom;
|
import org.apollo.util.security.IsaacRandom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link MessageToMessageEncoder} which encodes in-game packets.
|
* A {@link MessageToByteEncoder} which encodes in-game packets.
|
||||||
*
|
*
|
||||||
* @author Graham
|
* @author Graham
|
||||||
*/
|
*/
|
||||||
public final class GamePacketEncoder extends MessageToMessageEncoder<GamePacket> {
|
public final class GamePacketEncoder extends MessageToByteEncoder<GamePacket> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The random number generator.
|
* The random number generator.
|
||||||
@@ -32,32 +28,26 @@ public final class GamePacketEncoder extends MessageToMessageEncoder<GamePacket>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext ctx, GamePacket packet, List<Object> out) throws Exception {
|
protected void encode(ChannelHandlerContext ctx, GamePacket packet, ByteBuf out) throws Exception {
|
||||||
PacketType type = packet.getType();
|
PacketType type = packet.getType();
|
||||||
int headerLength = 1;
|
|
||||||
int payloadLength = packet.getLength();
|
int payloadLength = packet.getLength();
|
||||||
if (type == PacketType.VARIABLE_BYTE) {
|
if (type == PacketType.VARIABLE_BYTE) {
|
||||||
headerLength++;
|
|
||||||
if (payloadLength >= 256) {
|
if (payloadLength >= 256) {
|
||||||
throw new Exception("Payload too long for variable byte packet.");
|
throw new Exception("Payload too long for variable byte packet.");
|
||||||
}
|
}
|
||||||
} else if (type == PacketType.VARIABLE_SHORT) {
|
} else if (type == PacketType.VARIABLE_SHORT) {
|
||||||
headerLength += 2;
|
|
||||||
if (payloadLength >= 65_536) {
|
if (payloadLength >= 65_536) {
|
||||||
throw new Exception("Payload too long for variable short packet.");
|
throw new Exception("Payload too long for variable short packet.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteBuf buffer = Unpooled.buffer(headerLength + payloadLength);
|
out.writeByte(packet.getOpcode() + random.nextInt() & 0xFF);
|
||||||
buffer.writeByte(packet.getOpcode() + random.nextInt() & 0xFF);
|
|
||||||
if (type == PacketType.VARIABLE_BYTE) {
|
if (type == PacketType.VARIABLE_BYTE) {
|
||||||
buffer.writeByte(payloadLength);
|
out.writeByte(payloadLength);
|
||||||
} else if (type == PacketType.VARIABLE_SHORT) {
|
} else if (type == PacketType.VARIABLE_SHORT) {
|
||||||
buffer.writeShort(payloadLength);
|
out.writeShort(payloadLength);
|
||||||
}
|
}
|
||||||
buffer.writeBytes(packet.getPayload());
|
out.writeBytes(packet.getPayload());
|
||||||
|
|
||||||
out.add(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,16 +2,14 @@ package org.apollo.net.codec.login;
|
|||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.MessageToMessageEncoder;
|
import io.netty.handler.codec.MessageToByteEncoder;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link MessageToMessageEncoder} which encodes login response messages.
|
* A {@link MessageToByteEncoder} which encodes login response messages.
|
||||||
*
|
*
|
||||||
* @author Graham
|
* @author Graham
|
||||||
*/
|
*/
|
||||||
public final class LoginEncoder extends MessageToMessageEncoder<LoginResponse> {
|
public final class LoginEncoder extends MessageToByteEncoder<LoginResponse> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the login encoder.
|
* Creates the login encoder.
|
||||||
@@ -21,16 +19,13 @@ public final class LoginEncoder extends MessageToMessageEncoder<LoginResponse> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext ctx, LoginResponse response, List<Object> out) {
|
protected void encode(ChannelHandlerContext ctx, LoginResponse response, ByteBuf out) {
|
||||||
ByteBuf buffer = ctx.alloc().buffer(3);
|
out.writeByte(response.getStatus());
|
||||||
buffer.writeByte(response.getStatus());
|
|
||||||
|
|
||||||
if (response.getStatus() == LoginConstants.STATUS_OK) {
|
if (response.getStatus() == LoginConstants.STATUS_OK) {
|
||||||
buffer.writeByte(response.getRights());
|
out.writeByte(response.getRights());
|
||||||
buffer.writeByte(response.isFlagged() ? 1 : 0);
|
out.writeByte(response.isFlagged() ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
out.add(buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user