Optimization + fixed random tcp crash

This commit is contained in:
Felix Cravic 2020-04-17 03:44:00 +02:00
parent 4af1c0388c
commit 944ac43b3f
4 changed files with 29 additions and 13 deletions

View File

@ -24,7 +24,7 @@ public class MinecraftServer {
public static final String THREAD_NAME_BENCHMARK = "Ms-Benchmark";
public static final String THREAD_NAME_MAIN_UPDATE = "Ms-MainUpdate";
public static final int THREAD_COUNT_MAIN_UPDATE = 1;
public static final int THREAD_COUNT_MAIN_UPDATE = 1; // Keep it to 1
public static final String THREAD_NAME_PACKET_WRITER = "Ms-PacketWriterPool";
public static final int THREAD_COUNT_PACKET_WRITER = 2;

View File

@ -10,15 +10,38 @@ import java.util.List;
public class NettyDecoder extends ByteToMessageDecoder {
private int bytesToRead;
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception {
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
// Fix cut packet
if (bytesToRead != 0) {
int readable = buffer.readableBytes();
if (readable >= bytesToRead) {
PacketHandler packetHandler = new PacketHandler();
packetHandler.length = bytesToRead;
packetHandler.buffer = buffer.readBytes(bytesToRead);
out.add(packetHandler);
bytesToRead = 0;
}
return;
}
int packetLength = Utils.readVarInt(buffer);
PacketHandler packetHandler = new PacketHandler();
packetHandler.length = packetLength;
if (packetLength == 0xFE) { // Legacy server ping
packetHandler.buffer = buffer.readBytes(2);
} else {
packetHandler.buffer = buffer.readBytes(packetLength);
int readable = buffer.readableBytes();
if (readable < packetLength) {
bytesToRead = packetLength;
return;
} else {
packetHandler.buffer = buffer.readBytes(packetLength);
bytesToRead = 0;
}
}
out.add(packetHandler);

View File

@ -2,6 +2,7 @@ package fr.themode.minestom.net.packet;
import fr.themode.minestom.item.ItemStack;
import fr.themode.minestom.utils.BlockPosition;
import fr.themode.minestom.utils.SerializerUtils;
import fr.themode.minestom.utils.Utils;
import fr.themode.minestom.utils.buffer.BufferWrapper;
@ -145,11 +146,11 @@ public class PacketWriter {
}
public void writeBlockPosition(BlockPosition blockPosition) {
Utils.writePosition(this, blockPosition);
writeBlockPosition(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ());
}
public void writeBlockPosition(int x, int y, int z) {
Utils.writePosition(this, x, y, z);
writeLong(SerializerUtils.positionToLong(x, y, z));
}
public void writeItemStack(ItemStack itemStack) {

View File

@ -57,14 +57,6 @@ public class Utils {
return i;
}
public static void writePosition(PacketWriter writer, int x, int y, int z) {
writer.writeLong(SerializerUtils.positionToLong(x, y, z));
}
public static void writePosition(PacketWriter writer, BlockPosition blockPosition) {
writePosition(writer, blockPosition.getX(), blockPosition.getY(), blockPosition.getZ());
}
public static int readVarInt(ByteBuf buffer) {
int numRead = 0;
int result = 0;