mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Merge pull request #420 from ryleykimmel/netty-resource-leak-fix
Allow Netty to automatically maintain our internal usages of ByteBuf
This commit is contained in:
+1
-1
@@ -47,7 +47,7 @@ public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<Grou
|
||||
|
||||
GamePacket packet = encoder.encode(update);
|
||||
builder.put(DataType.BYTE, packet.getOpcode());
|
||||
builder.putBytes(packet.getPayload());
|
||||
builder.putBytes(packet.content());
|
||||
}
|
||||
|
||||
return builder.toGamePacket();
|
||||
|
||||
@@ -13,7 +13,7 @@ public final class SpamPacketMessageDecoder extends MessageDecoder<SpamPacketMes
|
||||
|
||||
@Override
|
||||
public SpamPacketMessage decode(GamePacket packet) {
|
||||
return new SpamPacketMessage(packet.getPayload().array());
|
||||
return new SpamPacketMessage(packet.content().array());
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -47,7 +47,7 @@ public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<Grou
|
||||
|
||||
GamePacket packet = encoder.encode(update);
|
||||
builder.put(DataType.BYTE, packet.getOpcode());
|
||||
builder.putBytes(packet.getPayload());
|
||||
builder.putBytes(packet.content());
|
||||
}
|
||||
|
||||
return builder.toGamePacket();
|
||||
|
||||
@@ -13,7 +13,7 @@ public final class SpamPacketMessageDecoder extends MessageDecoder<SpamPacketMes
|
||||
|
||||
@Override
|
||||
public SpamPacketMessage decode(GamePacket packet) {
|
||||
return new SpamPacketMessage(packet.getPayload().array());
|
||||
return new SpamPacketMessage(packet.content().array());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -70,37 +70,32 @@ public final class ApolloHandler extends ChannelInboundHandlerAdapter {
|
||||
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception {
|
||||
try {
|
||||
Channel channel = ctx.channel();
|
||||
Attribute<Session> attribute = channel.attr(ApolloHandler.SESSION_KEY);
|
||||
Session session = attribute.get();
|
||||
Channel channel = ctx.channel();
|
||||
Attribute<Session> attribute = channel.attr(ApolloHandler.SESSION_KEY);
|
||||
Session session = attribute.get();
|
||||
|
||||
if (message instanceof HttpRequest || message instanceof JagGrabRequest) {
|
||||
session = new UpdateSession(channel, serverContext);
|
||||
if (message instanceof HttpRequest || message instanceof JagGrabRequest) {
|
||||
session = new UpdateSession(channel, serverContext);
|
||||
}
|
||||
|
||||
if (session != null) {
|
||||
session.messageReceived(message);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Perhaps let HandshakeMessage implement Message to remove this explicit check
|
||||
if (message instanceof HandshakeMessage) {
|
||||
HandshakeMessage handshakeMessage = (HandshakeMessage) message;
|
||||
|
||||
switch (handshakeMessage.getServiceId()) {
|
||||
case HandshakeConstants.SERVICE_GAME:
|
||||
attribute.set(new LoginSession(channel, serverContext));
|
||||
break;
|
||||
|
||||
case HandshakeConstants.SERVICE_UPDATE:
|
||||
attribute.set(new UpdateSession(channel, serverContext));
|
||||
break;
|
||||
}
|
||||
|
||||
if (session != null) {
|
||||
session.messageReceived(message);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Perhaps let HandshakeMessage implement Message to remove this explicit check
|
||||
if (message instanceof HandshakeMessage) {
|
||||
HandshakeMessage handshakeMessage = (HandshakeMessage) message;
|
||||
|
||||
switch (handshakeMessage.getServiceId()) {
|
||||
case HandshakeConstants.SERVICE_GAME:
|
||||
attribute.set(new LoginSession(channel, serverContext));
|
||||
break;
|
||||
|
||||
case HandshakeConstants.SERVICE_UPDATE:
|
||||
attribute.set(new UpdateSession(channel, serverContext));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} finally {
|
||||
ReferenceCountUtil.release(message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.apollo.net.codec.game;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import io.netty.buffer.DefaultByteBufHolder;
|
||||
import org.apollo.net.meta.PacketType;
|
||||
|
||||
/**
|
||||
@@ -9,7 +10,7 @@ import org.apollo.net.meta.PacketType;
|
||||
*
|
||||
* @author Graham
|
||||
*/
|
||||
public final class GamePacket {
|
||||
public final class GamePacket extends DefaultByteBufHolder {
|
||||
|
||||
/**
|
||||
* The length.
|
||||
@@ -21,11 +22,6 @@ public final class GamePacket {
|
||||
*/
|
||||
private final int opcode;
|
||||
|
||||
/**
|
||||
* The payload.
|
||||
*/
|
||||
private final ByteBuf payload;
|
||||
|
||||
/**
|
||||
* The packet type.
|
||||
*/
|
||||
@@ -39,10 +35,10 @@ public final class GamePacket {
|
||||
* @param payload The payload.
|
||||
*/
|
||||
public GamePacket(int opcode, PacketType type, ByteBuf payload) {
|
||||
super(payload);
|
||||
this.opcode = opcode;
|
||||
this.type = type;
|
||||
length = payload.readableBytes();
|
||||
this.payload = payload;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,15 +59,6 @@ public final class GamePacket {
|
||||
return opcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the payload.
|
||||
*
|
||||
* @return The payload.
|
||||
*/
|
||||
public ByteBuf getPayload() {
|
||||
return payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the packet type.
|
||||
*
|
||||
|
||||
@@ -44,7 +44,7 @@ public final class GamePacketEncoder extends MessageToByteEncoder<GamePacket> {
|
||||
} else if (type == PacketType.VARIABLE_SHORT) {
|
||||
out.writeShort(payloadLength);
|
||||
}
|
||||
out.writeBytes(packet.getPayload());
|
||||
out.writeBytes(packet.content());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,7 +34,7 @@ public final class GamePacketReader {
|
||||
* @param packet The packet.
|
||||
*/
|
||||
public GamePacketReader(GamePacket packet) {
|
||||
buffer = packet.getPayload();
|
||||
buffer = packet.content();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user