|
9 | 9 | import org.json.JSONObject;
|
10 | 10 |
|
11 | 11 | import java.util.*;
|
| 12 | +import java.util.concurrent.ConcurrentLinkedQueue; |
12 | 13 | import java.util.logging.Level;
|
13 | 14 | import java.util.logging.Logger;
|
14 | 15 |
|
@@ -63,6 +64,9 @@ public class Socket extends Emitter {
|
63 | 64 | private final Queue<List<Object>> receiveBuffer = new LinkedList<>();
|
64 | 65 | private final Queue<Packet<JSONArray>> sendBuffer = new LinkedList<>();
|
65 | 66 |
|
| 67 | + private ConcurrentLinkedQueue<Listener> onAnyIncomingListeners = new ConcurrentLinkedQueue<>(); |
| 68 | + private ConcurrentLinkedQueue<Listener> onAnyOutgoingListeners = new ConcurrentLinkedQueue<>(); |
| 69 | + |
66 | 70 | public Socket(Manager io, String nsp, Manager.Options opts) {
|
67 | 71 | this.io = io;
|
68 | 72 | this.nsp = nsp;
|
@@ -250,6 +254,14 @@ public void run() {
|
250 | 254 | }
|
251 | 255 |
|
252 | 256 | private void packet(Packet packet) {
|
| 257 | + if (packet.type == Parser.EVENT) { |
| 258 | + if (!onAnyOutgoingListeners.isEmpty()) { |
| 259 | + Object[] argsAsArray = toArray((JSONArray) packet.data); |
| 260 | + for (Listener listener : onAnyOutgoingListeners) { |
| 261 | + listener.call(argsAsArray); |
| 262 | + } |
| 263 | + } |
| 264 | + } |
253 | 265 | packet.nsp = this.nsp;
|
254 | 266 | this.io.packet(packet);
|
255 | 267 | }
|
@@ -340,6 +352,12 @@ private void onevent(Packet<JSONArray> packet) {
|
340 | 352 |
|
341 | 353 | if (this.connected) {
|
342 | 354 | if (args.isEmpty()) return;
|
| 355 | + if (!this.onAnyIncomingListeners.isEmpty()) { |
| 356 | + Object[] argsAsArray = args.toArray(); |
| 357 | + for (Listener listener : this.onAnyIncomingListeners) { |
| 358 | + listener.call(argsAsArray); |
| 359 | + } |
| 360 | + } |
343 | 361 | String event = args.remove(0).toString();
|
344 | 362 | super.emit(event, args.toArray());
|
345 | 363 | } else {
|
@@ -507,5 +525,49 @@ private static Object[] toArray(JSONArray array) {
|
507 | 525 | }
|
508 | 526 | return data;
|
509 | 527 | }
|
| 528 | + |
| 529 | + public Socket onAnyIncoming(Listener fn) { |
| 530 | + this.onAnyIncomingListeners.add(fn); |
| 531 | + return this; |
| 532 | + } |
| 533 | + |
| 534 | + public Socket offAnyIncoming() { |
| 535 | + this.onAnyIncomingListeners.clear(); |
| 536 | + return this; |
| 537 | + } |
| 538 | + |
| 539 | + public Socket offAnyIncoming(Listener fn) { |
| 540 | + Iterator<Listener> it = this.onAnyIncomingListeners.iterator(); |
| 541 | + while (it.hasNext()) { |
| 542 | + Listener listener = it.next(); |
| 543 | + if (listener == fn) { |
| 544 | + it.remove(); |
| 545 | + break; |
| 546 | + } |
| 547 | + } |
| 548 | + return this; |
| 549 | + } |
| 550 | + |
| 551 | + public Socket onAnyOutgoing(Listener fn) { |
| 552 | + this.onAnyOutgoingListeners.add(fn); |
| 553 | + return this; |
| 554 | + } |
| 555 | + |
| 556 | + public Socket offAnyOutgoing() { |
| 557 | + this.onAnyOutgoingListeners.clear(); |
| 558 | + return this; |
| 559 | + } |
| 560 | + |
| 561 | + public Socket offAnyOutgoing(Listener fn) { |
| 562 | + Iterator<Listener> it = this.onAnyOutgoingListeners.iterator(); |
| 563 | + while (it.hasNext()) { |
| 564 | + Listener listener = it.next(); |
| 565 | + if (listener == fn) { |
| 566 | + it.remove(); |
| 567 | + break; |
| 568 | + } |
| 569 | + } |
| 570 | + return this; |
| 571 | + } |
510 | 572 | }
|
511 | 573 |
|
0 commit comments