Improve async packet processing logic (#2503)
* fix: enqueue async packet event after processing delay is zero * fix: async packet processing
This commit is contained in:
parent
2686c9fec0
commit
f0401acd2f
|
@ -413,6 +413,23 @@ public class AsyncFilterManager implements AsynchronousManager {
|
||||||
|
|
||||||
// Only send if the packet is ready
|
// Only send if the packet is ready
|
||||||
if (marker.decrementProcessingDelay() == 0) {
|
if (marker.decrementProcessingDelay() == 0) {
|
||||||
|
|
||||||
|
// Now, get the next non-cancelled listener
|
||||||
|
if (!marker.hasExpired()) {
|
||||||
|
for (; marker.getListenerTraversal().hasNext(); ) {
|
||||||
|
AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener();
|
||||||
|
|
||||||
|
if (!handler.isCancelled()) {
|
||||||
|
marker.incrementProcessingDelay();
|
||||||
|
handler.enqueuePacket(packet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// There are no more listeners - queue the packet for transmission
|
||||||
|
signalFreeProcessingSlot(packet);
|
||||||
|
|
||||||
PacketSendingQueue queue = getSendingQueue(packet, false);
|
PacketSendingQueue queue = getSendingQueue(packet, false);
|
||||||
|
|
||||||
// No need to create a new queue if the player has logged out
|
// No need to create a new queue if the player has logged out
|
||||||
|
|
|
@ -632,21 +632,6 @@ public class AsyncListenerHandler {
|
||||||
filterManager.getErrorReporter().reportMinimal(listener.getPlugin(), methodName, e);
|
filterManager.getErrorReporter().reportMinimal(listener.getPlugin(), methodName, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now, get the next non-cancelled listener
|
|
||||||
if (!marker.hasExpired()) {
|
|
||||||
for (; marker.getListenerTraversal().hasNext(); ) {
|
|
||||||
AsyncListenerHandler handler = marker.getListenerTraversal().next().getListener();
|
|
||||||
|
|
||||||
if (!handler.isCancelled()) {
|
|
||||||
handler.enqueuePacket(packet);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// There are no more listeners - queue the packet for transmission
|
|
||||||
filterManager.signalFreeProcessingSlot(packet);
|
|
||||||
|
|
||||||
// Note that listeners can opt to delay the packet transmission
|
// Note that listeners can opt to delay the packet transmission
|
||||||
filterManager.signalPacketTransmission(packet);
|
filterManager.signalPacketTransmission(packet);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue