mirror of https://github.com/Minestom/Minestom.git
Optimization + fixed random tcp crash
This commit is contained in:
parent
4af1c0388c
commit
944ac43b3f
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue