Browse Source

Merge pull request #707 from yosiat/add-global-events

Add support for event interceptors which catch all events
master
Nikita Koksharov 6 years ago
committed by GitHub
parent
commit
c54bf3fcd2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      src/main/java/com/corundumstudio/socketio/SocketIOServer.java
  2. 3
      src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java
  3. 9
      src/main/java/com/corundumstudio/socketio/listener/EventInterceptor.java
  4. 10
      src/main/java/com/corundumstudio/socketio/namespace/Namespace.java

7
src/main/java/com/corundumstudio/socketio/SocketIOServer.java

@ -229,6 +229,13 @@ public class SocketIOServer implements ClientListeners {
mainNamespace.addEventListener(eventName, eventClass, listener);
}
@Override
public void addEventInterceptor(EventInterceptor eventInterceptor) {
mainNamespace.addEventInterceptor(eventInterceptor);
}
@Override
public void removeAllListeners(String eventName) {
mainNamespace.removeAllListeners(eventName);

3
src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java

@ -15,12 +15,15 @@
*/
package com.corundumstudio.socketio.listener;
public interface ClientListeners {
void addMultiTypeEventListener(String eventName, MultiTypeEventListener listener, Class<?> ... eventClass);
<T> void addEventListener(String eventName, Class<T> eventClass, DataListener<T> listener);
void addEventInterceptor(EventInterceptor eventInterceptor);
void addDisconnectListener(DisconnectListener listener);
void addConnectListener(ConnectListener listener);

9
src/main/java/com/corundumstudio/socketio/listener/EventInterceptor.java

@ -0,0 +1,9 @@
package com.corundumstudio.socketio.listener;
import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.transport.NamespaceClient;
import java.util.List;
public interface EventInterceptor {
void onEvent(NamespaceClient client, String eventName, List<Object> args, AckRequest ackRequest);
}

10
src/main/java/com/corundumstudio/socketio/namespace/Namespace.java

@ -59,6 +59,7 @@ public class Namespace implements SocketIONamespace {
private final Queue<ConnectListener> connectListeners = new ConcurrentLinkedQueue<ConnectListener>();
private final Queue<DisconnectListener> disconnectListeners = new ConcurrentLinkedQueue<DisconnectListener>();
private final Queue<PingListener> pingListeners = new ConcurrentLinkedQueue<PingListener>();
private final Queue<EventInterceptor> eventInterceptors = new ConcurrentLinkedQueue<EventInterceptor>();
private final Map<UUID, SocketIOClient> allClients = PlatformDependent.newConcurrentHashMap();
private final ConcurrentMap<String, Set<UUID>> roomClients = PlatformDependent.newConcurrentHashMap();
@ -126,6 +127,11 @@ public class Namespace implements SocketIONamespace {
jsonSupport.addEventMapping(name, eventName, eventClass);
}
@Override
public void addEventInterceptor(EventInterceptor eventInterceptor) {
eventInterceptors.add(eventInterceptor);
}
@SuppressWarnings({"rawtypes", "unchecked"})
public void onEvent(NamespaceClient client, String eventName, List<Object> args, AckRequest ackRequest) {
EventEntry entry = eventListeners.get(eventName);
@ -139,6 +145,10 @@ public class Namespace implements SocketIONamespace {
Object data = getEventData(args, dataListener);
dataListener.onData(client, data, ackRequest);
}
for (EventInterceptor eventInterceptor : eventInterceptors) {
eventInterceptor.onEvent(client, eventName, args, ackRequest);
}
} catch (Exception e) {
exceptionListener.onEventException(e, args, client);
if (ackMode == AckMode.AUTO_SUCCESS_ONLY) {

Loading…
Cancel
Save