From ee8c9e4a3e967945a5f03069ff6b1c3dd6d12517 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 9 Jul 2021 14:19:05 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20object=20pool=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20NetByteBuf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/codec/ProtocolDecoder.java | 5 +++-- .../handler/codec/ProtocolEncoder.java | 10 +++++---- .../packets/play/server/ChunkDataPacket.java | 22 +++++++++---------- .../protocol/pool/NetByteBufObjectPool.java | 2 +- .../mc/protocol/pool/PooledNetByteBuf.java | 2 +- server/src/main/resources/logback-default.xml | 6 +++++ 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/protocol/src/main/java/mc/protocol/handler/codec/ProtocolDecoder.java b/protocol/src/main/java/mc/protocol/handler/codec/ProtocolDecoder.java index fa6eae1..64318e7 100644 --- a/protocol/src/main/java/mc/protocol/handler/codec/ProtocolDecoder.java +++ b/protocol/src/main/java/mc/protocol/handler/codec/ProtocolDecoder.java @@ -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 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 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) { diff --git a/protocol/src/main/java/mc/protocol/handler/codec/ProtocolEncoder.java b/protocol/src/main/java/mc/protocol/handler/codec/ProtocolEncoder.java index 9a81319..a020d0c 100644 --- a/protocol/src/main/java/mc/protocol/handler/codec/ProtocolEncoder.java +++ b/protocol/src/main/java/mc/protocol/handler/codec/ProtocolEncoder.java @@ -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 { 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); } } diff --git a/protocol/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java b/protocol/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java index 8399ff9..cd98d77 100644 --- a/protocol/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java @@ -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); } } diff --git a/protocol/src/main/java/mc/protocol/pool/NetByteBufObjectPool.java b/protocol/src/main/java/mc/protocol/pool/NetByteBufObjectPool.java index 6d6ff71..e080317 100644 --- a/protocol/src/main/java/mc/protocol/pool/NetByteBufObjectPool.java +++ b/protocol/src/main/java/mc/protocol/pool/NetByteBufObjectPool.java @@ -19,7 +19,7 @@ public class NetByteBufObjectPool implements ObjectPool { @Override public NetByteBuf borrowObject() { - return borrowObject(PooledByteBufAllocator.DEFAULT.buffer()); + return borrowObject(PooledByteBufAllocator.DEFAULT.directBuffer()); } @SneakyThrows diff --git a/protocol/src/main/java/mc/protocol/pool/PooledNetByteBuf.java b/protocol/src/main/java/mc/protocol/pool/PooledNetByteBuf.java index e9e26fa..2cb8c8c 100644 --- a/protocol/src/main/java/mc/protocol/pool/PooledNetByteBuf.java +++ b/protocol/src/main/java/mc/protocol/pool/PooledNetByteBuf.java @@ -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 diff --git a/server/src/main/resources/logback-default.xml b/server/src/main/resources/logback-default.xml index 2e6a315..18f9e7c 100644 --- a/server/src/main/resources/logback-default.xml +++ b/server/src/main/resources/logback-default.xml @@ -20,4 +20,10 @@ + + + + + + \ No newline at end of file