From f313efe214dd84698fa6d39780c63fce0fb98acf Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 11 May 2022 18:12:24 +0200 Subject: [PATCH] network: set chunk packets to lower priority --- .../network/network/client/pipeline/ClientPacketHandler.kt | 2 +- .../minosoft/protocol/packets/factory/AbstractPacketType.kt | 1 + .../minosoft/protocol/packets/factory/C2SPacketType.kt | 3 ++- .../bixilon/minosoft/protocol/packets/factory/LoadPacket.kt | 1 + .../minosoft/protocol/packets/factory/S2CPacketType.kt | 5 +++-- .../protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt | 2 +- .../minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt | 2 +- 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/ClientPacketHandler.kt b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/ClientPacketHandler.kt index 87d57c8ea..f3fb1848f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/ClientPacketHandler.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/network/client/pipeline/ClientPacketHandler.kt @@ -54,7 +54,7 @@ class ClientPacketHandler( override fun channelRead0(context: ChannelHandlerContext, queued: QueuedS2CP<*>) { if (queued.type.threadSafe && DefaultThreadPool.queueSize <= DefaultThreadPool.threadCount) { // only handle async when thread pool not busy - val runnable = ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGH) + val runnable = ThreadPoolRunnable(priority = if (queued.type.lowPriority) ThreadPool.Priorities.HIGH else ThreadPool.Priorities.HIGHER) runnable.runnable = Runnable { tryHandle(context, queued.type, queued.packet);handlers -= runnable } handlers += runnable DefaultThreadPool += runnable diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt index bb501bfa9..afff7b61f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/AbstractPacketType.kt @@ -16,4 +16,5 @@ package de.bixilon.minosoft.protocol.packets.factory interface AbstractPacketType { val direction: PacketDirection val threadSafe: Boolean + val lowPriority: Boolean } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt index ee2f2f49b..ed2b58076 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/C2SPacketType.kt @@ -21,6 +21,7 @@ class C2SPacketType( val clazz: Class, val annotation: LoadPacket?, override val threadSafe: Boolean = annotation!!.threadSafe, + override val lowPriority: Boolean = annotation!!.lowPriority, ) : AbstractPacketType { override val direction = PacketDirection.CLIENT_TO_SERVER @@ -29,6 +30,6 @@ class C2SPacketType( } companion object { - val EMPTY = { C2SPacketType(ProtocolStates.HANDSHAKING, C2SPacket::class.java, null, false) } + val EMPTY = { C2SPacketType(ProtocolStates.HANDSHAKING, C2SPacket::class.java, null, threadSafe = false, lowPriority = false) } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt index 1e88bb173..bcd5421e0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/LoadPacket.kt @@ -22,4 +22,5 @@ annotation class LoadPacket( val name: String = "", val threadSafe: Boolean = true, val parent: Boolean = false, + val lowPriority: Boolean = false, ) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt index cadc02cd8..cb013395e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/factory/S2CPacketType.kt @@ -19,13 +19,14 @@ import de.bixilon.minosoft.protocol.packets.factory.factories.PacketFactory import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolStates -class S2CPacketType( +class S2CPacketType constructor( val state: ProtocolStates, val clazz: Class, private val packetErrorHandler: PacketErrorHandler?, val annotation: LoadPacket?, val factory: PacketFactory? = null, override val threadSafe: Boolean = annotation!!.threadSafe, + override val lowPriority: Boolean = annotation!!.lowPriority, ) : AbstractPacketType, PacketErrorHandler { override val direction = PacketDirection.SERVER_TO_CLIENT @@ -40,6 +41,6 @@ class S2CPacketType( companion object { - val EMPTY = { S2CPacketType(ProtocolStates.HANDSHAKING, S2CPacket::class.java, null, null, null, false) } + val EMPTY = { S2CPacketType(ProtocolStates.HANDSHAKING, S2CPacket::class.java, null, null, null, threadSafe = false, lowPriority = false) } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt index c5173cedc..ec13fc869 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkLightS2CP.kt @@ -27,7 +27,7 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket +@LoadPacket(lowPriority = true) class ChunkLightS2CP @JvmOverloads constructor(buffer: PlayInByteBuffer, chunkPositionGetter: () -> Vec2i = { Vec2i(buffer.readVarInt(), buffer.readVarInt()) }) : PlayS2CPacket { val chunkPosition: Vec2i = chunkPositionGetter() var trustEdges: Boolean = false diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt index c7a199b08..9afea898f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chunk/ChunkS2CP.kt @@ -47,7 +47,7 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType import java.util.* -@LoadPacket +@LoadPacket(lowPriority = true) class ChunkS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { val chunkPosition: Vec2i val chunkData: ChunkData = ChunkData()