diff --git a/src/main/java/com/corundumstudio/socketio/Configuration.java b/src/main/java/com/corundumstudio/socketio/Configuration.java index d39e8c82c..70f97a072 100644 --- a/src/main/java/com/corundumstudio/socketio/Configuration.java +++ b/src/main/java/com/corundumstudio/socketio/Configuration.java @@ -16,18 +16,20 @@ package com.corundumstudio.socketio; import java.io.InputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import javax.net.ssl.KeyManagerFactory; + import com.corundumstudio.socketio.handler.SuccessAuthorizationListener; import com.corundumstudio.socketio.listener.DefaultExceptionListener; +import com.corundumstudio.socketio.listener.EventInterceptor; import com.corundumstudio.socketio.listener.ExceptionListener; import com.corundumstudio.socketio.protocol.JsonSupport; import com.corundumstudio.socketio.store.MemoryStoreFactory; import com.corundumstudio.socketio.store.StoreFactory; -import javax.net.ssl.KeyManagerFactory; - public class Configuration { private ExceptionListener exceptionListener = new DefaultExceptionListener(); @@ -85,6 +87,8 @@ public class Configuration { private boolean httpCompression = true; private boolean websocketCompression = true; + + private List eventInterceptors = new ArrayList(); public Configuration() { } @@ -151,6 +155,7 @@ public Configuration() { setHttpCompression(conf.isHttpCompression()); setWebsocketCompression(conf.isWebsocketCompression()); + setEventInterceptors(conf.getEventInterceptors()); } public JsonSupport getJsonSupport() { @@ -573,5 +578,20 @@ public void setWebsocketCompression(boolean websocketCompression) { public boolean isWebsocketCompression() { return websocketCompression; } + + /** + * Add interceptor will run when onEvent. + * @param eventInterceptor + */ + public void addEventInterceptor(EventInterceptor eventInterceptor){ + this.eventInterceptors.add(eventInterceptor); + } + public List getEventInterceptors(){ + List interceptors = new ArrayList(eventInterceptors); + return interceptors; + } + private void setEventInterceptors(List eventInterceptors){ + this.eventInterceptors = eventInterceptors; + } } diff --git a/src/main/java/com/corundumstudio/socketio/listener/EventInterceptor.java b/src/main/java/com/corundumstudio/socketio/listener/EventInterceptor.java new file mode 100644 index 000000000..281f6556f --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/listener/EventInterceptor.java @@ -0,0 +1,12 @@ +package com.corundumstudio.socketio.listener; + +import java.util.List; + +import com.corundumstudio.socketio.AckRequest; +import com.corundumstudio.socketio.transport.NamespaceClient; + +public interface EventInterceptor { + + void onEvent(NamespaceClient client, String eventName, List args, AckRequest ackRequest); + +} diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index e288f6f40..a5d2c8281 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -37,6 +37,7 @@ import com.corundumstudio.socketio.listener.ConnectListener; import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; +import com.corundumstudio.socketio.listener.EventInterceptor; import com.corundumstudio.socketio.listener.ExceptionListener; import com.corundumstudio.socketio.listener.MultiTypeEventListener; import com.corundumstudio.socketio.protocol.JsonSupport; @@ -72,6 +73,7 @@ public class Namespace implements SocketIONamespace { private final JsonSupport jsonSupport; private final StoreFactory storeFactory; private final ExceptionListener exceptionListener; + private final List eventInterceptors; public Namespace(String name, Configuration configuration) { super(); @@ -80,6 +82,7 @@ public Namespace(String name, Configuration configuration) { this.storeFactory = configuration.getStoreFactory(); this.exceptionListener = configuration.getExceptionListener(); this.ackMode = configuration.getAckMode(); + this.eventInterceptors = configuration.getEventInterceptors(); } public void addClient(SocketIOClient client) { @@ -137,6 +140,7 @@ public void onEvent(NamespaceClient client, String eventName, List args, } try { + runEventInterceptors(client, eventName, args, ackRequest); Queue listeners = entry.getListeners(); for (DataListener dataListener : listeners) { Object data = getEventData(args, dataListener); @@ -360,4 +364,13 @@ public SocketIOClient getClient(UUID uuid) { return allClients.get(uuid); } + private void runEventInterceptors(NamespaceClient client, String eventName, List args, AckRequest ackRequest){ + for(EventInterceptor interceptor:eventInterceptors){ + try{ + interceptor.onEvent(client, eventName, args, ackRequest); + }catch(Exception e){ + e.printStackTrace(); + } + } + } }