рефакторинг object pool для NetByteBuf
This commit is contained in:
@@ -11,7 +11,6 @@ import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.protocol.packets.UnknownPacket;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
import mc.protocol.pool.UnpooledNetByteBuf;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -30,7 +29,7 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
@Override
|
||||
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
|
||||
State state = Objects.requireNonNull(ctx.channel().attr(ProtocolAttributes.STATE).get());
|
||||
NetByteBuf netByteBuf = new UnpooledNetByteBuf(in);
|
||||
NetByteBuf netByteBuf = ProtocolObjectPool.netByteBuf().borrowObject(in);
|
||||
|
||||
int packetId = netByteBuf.readVarInt();
|
||||
Class<? extends ClientSidePacket> packetClass = state.getClientSidePacketById(packetId);
|
||||
@@ -55,6 +54,8 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
}
|
||||
out.add(packet);
|
||||
}
|
||||
|
||||
ProtocolObjectPool.netByteBuf().returnObject(netByteBuf);
|
||||
}
|
||||
|
||||
private static String packetIdAsHexcode(int packetId) {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package mc.protocol.handler.codec;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.MessageToByteEncoder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -9,7 +8,7 @@ import mc.protocol.ProtocolAttributes;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.packets.ServerSidePacket;
|
||||
import mc.protocol.pool.UnpooledNetByteBuf;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -29,12 +28,15 @@ public class ProtocolEncoder extends MessageToByteEncoder<ServerSidePacket> {
|
||||
log.debug("OUT: {}:{}", state, packet);
|
||||
}
|
||||
|
||||
NetByteBuf buffer = new UnpooledNetByteBuf(Unpooled.buffer());
|
||||
NetByteBuf buffer = ProtocolObjectPool.netByteBuf().borrowObject();
|
||||
buffer.writeVarInt(packetId);
|
||||
packet.writeSelf(buffer);
|
||||
|
||||
NetByteBuf netByteBuf = new UnpooledNetByteBuf(out);
|
||||
NetByteBuf netByteBuf = ProtocolObjectPool.netByteBuf().borrowObject(out);
|
||||
netByteBuf.writeVarInt(buffer.readableBytes());
|
||||
netByteBuf.writeBytes(buffer);
|
||||
|
||||
ProtocolObjectPool.netByteBuf().returnObject(netByteBuf);
|
||||
ProtocolObjectPool.netByteBuf().returnObject(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.netty.buffer.Unpooled;
|
||||
import lombok.Data;
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.packets.ServerSidePacket;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
import mc.protocol.pool.UnpooledNetByteBuf;
|
||||
|
||||
/**
|
||||
@@ -79,24 +80,19 @@ public class ChunkDataPacket implements ServerSidePacket {
|
||||
}
|
||||
|
||||
static {
|
||||
voidData = new UnpooledNetByteBuf(Unpooled.buffer());
|
||||
voidData = new UnpooledNetByteBuf(Unpooled.directBuffer());
|
||||
voidData.writeBoolean(true); // Is Full chunk
|
||||
voidData.writeVarInt(0b11111111); // Available Sections
|
||||
|
||||
NetByteBuf data = new UnpooledNetByteBuf(Unpooled.buffer());
|
||||
NetByteBuf data = ProtocolObjectPool.netByteBuf().borrowObject();
|
||||
for (int i = 0; i < 16; i++) {
|
||||
NetByteBuf dataBuff = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[4096]));
|
||||
NetByteBuf blockLight = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[2048]));
|
||||
NetByteBuf skyLight = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[2048]));
|
||||
NetByteBuf biomes = new UnpooledNetByteBuf(Unpooled.wrappedBuffer(new byte[256]));
|
||||
|
||||
data.writeUnsignedByte(13);
|
||||
data.writeUnsignedByte(0);
|
||||
data.writeVarInt(dataBuff.readableBytes());
|
||||
data.writeBytes(dataBuff);
|
||||
data.writeBytes(blockLight);
|
||||
data.writeBytes(skyLight);
|
||||
data.writeBytes(biomes);
|
||||
data.writeVarInt(4096); // dataBuff.length
|
||||
data.writeBytes(new byte[4096]); // dataBuff
|
||||
data.writeBytes(new byte[2048]); // blockLight
|
||||
data.writeBytes(new byte[2048]); // skyLight
|
||||
data.writeBytes(new byte[256]); // biomes
|
||||
}
|
||||
|
||||
voidData.writeVarInt(data.readableBytes());
|
||||
@@ -105,5 +101,7 @@ public class ChunkDataPacket implements ServerSidePacket {
|
||||
|
||||
voidData.markReaderIndex();
|
||||
voidData.markWriterIndex();
|
||||
|
||||
ProtocolObjectPool.netByteBuf().returnObject(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public class NetByteBufObjectPool implements ObjectPool<NetByteBuf> {
|
||||
|
||||
@Override
|
||||
public NetByteBuf borrowObject() {
|
||||
return borrowObject(PooledByteBufAllocator.DEFAULT.buffer());
|
||||
return borrowObject(PooledByteBufAllocator.DEFAULT.directBuffer());
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
|
||||
@@ -7,7 +7,7 @@ import mc.utils.pool.Passivable;
|
||||
public class PooledNetByteBuf extends NetByteBuf implements Passivable {
|
||||
|
||||
void init(ByteBuf byteBuf) {
|
||||
this.byteBuf = byteBuf;
|
||||
this.byteBuf = byteBuf.retain();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,4 +20,10 @@
|
||||
<logger name="io.netty.handler.logging.LoggingHandler" level="debug" additivity="false">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</logger>
|
||||
<logger name="mc.protocol.handler.codec.ProtocolEncoder" level="debug" additivity="false">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</logger>
|
||||
<logger name="mc.protocol.handler.codec.ProtocolDecoder" level="debug" additivity="false">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</logger>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user