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