17
17
18
18
package com .comphenix .protocol .async ;
19
19
20
- import java .util .Collection ;
21
20
import java .util .List ;
22
21
import java .util .Set ;
23
22
import java .util .concurrent .ConcurrentHashMap ;
24
23
import java .util .concurrent .atomic .AtomicInteger ;
25
24
25
+ import org .bukkit .entity .Player ;
26
+ import org .bukkit .plugin .Plugin ;
27
+
26
28
import com .comphenix .protocol .AsynchronousManager ;
27
29
import com .comphenix .protocol .PacketStream ;
28
30
import com .comphenix .protocol .PacketType ;
31
33
import com .comphenix .protocol .events .ListeningWhitelist ;
32
34
import com .comphenix .protocol .events .PacketEvent ;
33
35
import com .comphenix .protocol .events .PacketListener ;
34
- import com .comphenix .protocol .injector .PrioritizedListener ;
35
- import com .comphenix .protocol .injector .SortedPacketListenerList ;
36
+ import com .comphenix .protocol .injector .collection . InboundPacketListenerSet ;
37
+ import com .comphenix .protocol .injector .collection . OutboundPacketListenerSet ;
36
38
import com .comphenix .protocol .scheduler .ProtocolScheduler ;
37
39
import com .google .common .base .Objects ;
38
40
import com .google .common .collect .ImmutableSet ;
39
41
import com .google .common .collect .Iterables ;
40
42
41
- import org .bukkit .entity .Player ;
42
- import org .bukkit .plugin .Plugin ;
43
-
44
43
/**
45
44
* Represents a filter manager for asynchronous packets.
46
45
* <p>
50
49
*/
51
50
public class AsyncFilterManager implements AsynchronousManager {
52
51
53
- private SortedPacketListenerList serverTimeoutListeners ;
54
- private SortedPacketListenerList clientTimeoutListeners ;
52
+ private OutboundPacketListenerSet outboundTimeoutListeners ;
53
+ private InboundPacketListenerSet inboundTimeoutListeners ;
55
54
private Set <PacketListener > timeoutListeners ;
56
55
57
56
private PacketProcessingQueue serverProcessingQueue ;
@@ -84,11 +83,11 @@ public class AsyncFilterManager implements AsynchronousManager {
84
83
*/
85
84
public AsyncFilterManager (ErrorReporter reporter , ProtocolScheduler scheduler ) {
86
85
// Initialize timeout listeners
87
- this .serverTimeoutListeners = new SortedPacketListenerList ( );
88
- this .clientTimeoutListeners = new SortedPacketListenerList ( );
86
+ this .outboundTimeoutListeners = new OutboundPacketListenerSet ( null , reporter );
87
+ this .inboundTimeoutListeners = new InboundPacketListenerSet ( null , reporter );
89
88
this .timeoutListeners = ConcurrentHashMap .newKeySet ();
90
89
91
- this .playerSendingHandler = new PlayerSendingHandler (reporter , serverTimeoutListeners , clientTimeoutListeners );
90
+ this .playerSendingHandler = new PlayerSendingHandler (outboundTimeoutListeners , inboundTimeoutListeners );
92
91
this .serverProcessingQueue = new PacketProcessingQueue (playerSendingHandler );
93
92
this .clientProcessingQueue = new PacketProcessingQueue (playerSendingHandler );
94
93
this .playerSendingHandler .initializeScheduler ();
@@ -130,9 +129,9 @@ public void registerTimeoutHandler(PacketListener listener) {
130
129
ListeningWhitelist receiving = listener .getReceivingWhitelist ();
131
130
132
131
if (!ListeningWhitelist .isEmpty (sending ))
133
- serverTimeoutListeners .addListener (listener , sending );
132
+ outboundTimeoutListeners .addListener (listener );
134
133
if (!ListeningWhitelist .isEmpty (receiving ))
135
- serverTimeoutListeners .addListener (listener , receiving );
134
+ inboundTimeoutListeners .addListener (listener );
136
135
}
137
136
138
137
@ Override
@@ -145,9 +144,8 @@ public Set<PacketListener> getAsyncHandlers() {
145
144
ImmutableSet .Builder <PacketListener > builder = ImmutableSet .builder ();
146
145
147
146
// Add every asynchronous packet listener
148
- for (PrioritizedListener <AsyncListenerHandler > handler :
149
- Iterables .concat (serverProcessingQueue .values (), clientProcessingQueue .values ())) {
150
- builder .add (handler .getListener ().getAsyncListener ());
147
+ for (AsyncListenerHandler handler : Iterables .concat (serverProcessingQueue .values (), clientProcessingQueue .values ())) {
148
+ builder .add (handler .getAsyncListener ());
151
149
}
152
150
return builder .build ();
153
151
}
@@ -203,13 +201,9 @@ public void unregisterTimeoutHandler(PacketListener listener) {
203
201
if (listener == null )
204
202
throw new IllegalArgumentException ("listener cannot be NULL." );
205
203
206
- ListeningWhitelist sending = listener .getSendingWhitelist ();
207
- ListeningWhitelist receiving = listener .getReceivingWhitelist ();
208
-
209
- // Do it in the opposite order
210
- if (serverTimeoutListeners .removeListener (listener , sending ).size () > 0 ||
211
- clientTimeoutListeners .removeListener (listener , receiving ).size () > 0 ) {
212
- timeoutListeners .remove (listener );
204
+ if (timeoutListeners .remove (listener )) {
205
+ outboundTimeoutListeners .removeListener (listener );
206
+ inboundTimeoutListeners .removeListener (listener );
213
207
}
214
208
}
215
209
@@ -233,9 +227,9 @@ private AsyncListenerHandler findHandler(PacketProcessingQueue queue, ListeningW
233
227
return null ;
234
228
235
229
for (PacketType type : search .getTypes ()) {
236
- for (PrioritizedListener < AsyncListenerHandler > element : queue .getListener (type )) {
237
- if (element .getListener (). getAsyncListener () == target ) {
238
- return element . getListener () ;
230
+ for (AsyncListenerHandler element : queue .get (type )) {
231
+ if (element .getAsyncListener () == target ) {
232
+ return element ;
239
233
}
240
234
}
241
235
}
@@ -292,10 +286,10 @@ public void unregisterAsyncHandlers(Plugin plugin) {
292
286
private void unregisterAsyncHandlers (PacketProcessingQueue processingQueue , Plugin plugin ) {
293
287
294
288
// Iterate through every packet listener
295
- for (PrioritizedListener < AsyncListenerHandler > listener : processingQueue .values ()) {
289
+ for (AsyncListenerHandler listener : processingQueue .values ()) {
296
290
// Remove the listener
297
- if (Objects .equal (listener .getListener (). getPlugin (), plugin )) {
298
- unregisterAsyncHandler (listener . getListener () );
291
+ if (Objects .equal (listener .getPlugin (), plugin )) {
292
+ unregisterAsyncHandler (listener );
299
293
}
300
294
}
301
295
}
@@ -346,8 +340,7 @@ public ProtocolScheduler getScheduler() {
346
340
347
341
@ Override
348
342
public boolean hasAsynchronousListeners (PacketEvent packet ) {
349
- Collection <?> list = getProcessingQueue (packet ).getListener (packet .getPacketType ());
350
- return list != null && list .size () > 0 ;
343
+ return getProcessingQueue (packet ).contains (packet .getPacketType ());
351
344
}
352
345
353
346
/**
@@ -388,8 +381,8 @@ public void cleanupAll() {
388
381
playerSendingHandler .cleanupAll ();
389
382
timeoutListeners .clear ();
390
383
391
- serverTimeoutListeners = null ;
392
- clientTimeoutListeners = null ;
384
+ outboundTimeoutListeners = null ;
385
+ inboundTimeoutListeners = null ;
393
386
}
394
387
395
388
@ Override
@@ -417,11 +410,11 @@ private void signalPacketTransmission(PacketEvent packet, boolean onMainThread)
417
410
// Now, get the next non-cancelled listener
418
411
if (!marker .hasExpired ()) {
419
412
for (; marker .getListenerTraversal ().hasNext (); ) {
420
- AsyncListenerHandler handler = marker .getListenerTraversal ().next (). getListener () ;
421
-
413
+ AsyncListenerHandler handler = marker .getListenerTraversal ().next ();
414
+
422
415
if (!handler .isCancelled ()) {
423
- marker .incrementProcessingDelay ();
424
- handler .enqueuePacket (packet );
416
+ marker .incrementProcessingDelay ();
417
+ handler .enqueuePacket (packet );
425
418
return ;
426
419
}
427
420
}
@@ -473,12 +466,12 @@ public PacketProcessingQueue getProcessingQueue(PacketEvent packet) {
473
466
* @param onMainThread whether or not this method was run by the main thread.
474
467
*/
475
468
public void signalFreeProcessingSlot (PacketEvent packet , boolean onMainThread ) {
476
- PacketProcessingQueue queue = getProcessingQueue (packet );
477
- // mark slot as done
478
- queue .signalProcessingDone ();
479
-
480
- // start processing next slot if possible
481
- queue .signalBeginProcessing (onMainThread );
469
+ PacketProcessingQueue queue = getProcessingQueue (packet );
470
+ // mark slot as done
471
+ queue .signalProcessingDone ();
472
+
473
+ // start processing next slot if possible
474
+ queue .signalBeginProcessing (onMainThread );
482
475
}
483
476
484
477
/**
0 commit comments