diff --git a/pom.xml b/pom.xml index 683d09743..a40eb2d31 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.corundumstudio.socketio netty-socketio - 1.7.20-SNAPSHOT + 1.7.20 bundle NettySocketIO Socket.IO server implemented on Java @@ -85,37 +85,37 @@ io.netty netty-buffer - 4.1.73.Final + 4.1.74.Final io.netty netty-common - 4.1.73.Final + 4.1.74.Final io.netty netty-transport - 4.1.73.Final + 4.1.74.Final io.netty netty-handler - 4.1.73.Final + 4.1.74.Final io.netty netty-codec-http - 4.1.73.Final + 4.1.74.Final io.netty netty-codec - 4.1.73.Final + 4.1.74.Final io.netty netty-transport-native-epoll - 4.1.73.Final + 4.1.74.Final @@ -134,31 +134,31 @@ org.slf4j slf4j-api - 1.7.33 + 1.7.36 com.fasterxml.jackson.core jackson-core - 2.13.1 + 2.13.2 com.fasterxml.jackson.core jackson-databind - 2.13.1 + 2.13.2 org.springframework spring-beans - 5.3.14 + 5.3.16 provided org.springframework spring-core - 5.3.14 + 5.3.16 commons-logging @@ -172,7 +172,7 @@ org.redisson redisson - 3.16.7 + 3.16.8 provided diff --git a/src/main/java/com/corundumstudio/socketio/ClientOperations.java b/src/main/java/com/corundumstudio/socketio/ClientOperations.java index dc576608f..4157d769a 100644 --- a/src/main/java/com/corundumstudio/socketio/ClientOperations.java +++ b/src/main/java/com/corundumstudio/socketio/ClientOperations.java @@ -38,6 +38,12 @@ public interface ClientOperations { */ void disconnect(); + /** + * Disconnect client + * + */ + void close(); + /** * Send event * diff --git a/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java index aee3e054d..d941e33b8 100644 --- a/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java +++ b/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java @@ -105,6 +105,16 @@ public void disconnect() { } } + @Override + public void close() { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.close(); + } + } + @Override public void sendEvent(String name, Object... data) { if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { diff --git a/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java index a0c871908..cd1240fc3 100644 --- a/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java +++ b/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java @@ -77,6 +77,13 @@ public void disconnect() { } } + @Override + public void close() { + for (SocketIOClient client : clients) { + client.close(); + } + } + @Override public void sendEvent(String name, SocketIOClient excludedClient, Object... data) { Packet packet = new Packet(PacketType.MESSAGE); diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java index 83f4b92ab..fbbb37331 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java @@ -248,12 +248,22 @@ public void addEventListener(String eventName, Class eventClass, DataList mainNamespace.addEventListener(eventName, eventClass, listener); } + @Override + public void removeEventListener(DataListener listener) { + mainNamespace.removeEventListener(listener); + } + @Override public void addEventInterceptor(EventInterceptor eventInterceptor) { mainNamespace.addEventInterceptor(eventInterceptor); } + @Override + public void removeEventInterceptor(EventInterceptor eventInterceptor) { + mainNamespace.removeEventInterceptor(eventInterceptor); + } + @Override public void removeAllListeners(String eventName) { @@ -265,25 +275,39 @@ public void addDisconnectListener(DisconnectListener listener) { mainNamespace.addDisconnectListener(listener); } + @Override + public void removeDisconnectListener(DisconnectListener listener) { + mainNamespace.removeDisconnectListener(listener); + } + @Override public void addConnectListener(ConnectListener listener) { mainNamespace.addConnectListener(listener); } + @Override + public void removeConnectListener(ConnectListener listener) { + mainNamespace.removeConnectListener(listener); + } + @Override public void addPingListener(PingListener listener) { mainNamespace.addPingListener(listener); } + @Override + public void removePingListener(PingListener listener) { + mainNamespace.removePingListener(listener); + } + @Override public void addListeners(Object listeners) { mainNamespace.addListeners(listeners); } - + @Override public void addListeners(Object listeners, Class listenersClass) { mainNamespace.addListeners(listeners, listenersClass); } - } diff --git a/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java b/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java index af6b82a2c..20b1b6c06 100644 --- a/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java +++ b/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java @@ -22,14 +22,24 @@ public interface ClientListeners { void addEventListener(String eventName, Class eventClass, DataListener listener); + void removeEventListener(DataListener listener); + void addEventInterceptor(EventInterceptor eventInterceptor); + void removeEventInterceptor(EventInterceptor eventInterceptor); + void addDisconnectListener(DisconnectListener listener); + void removeDisconnectListener(DisconnectListener listener); + void addConnectListener(ConnectListener listener); + void removeConnectListener(ConnectListener listener); + void addPingListener(PingListener listener); + void removePingListener(PingListener listener); + void addListeners(Object listeners); void addListeners(Object listeners, Class listenersClass); diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index 97057dd0e..132b702af 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -128,11 +128,35 @@ public void addEventListener(String eventName, Class eventClass, DataList jsonSupport.addEventMapping(name, eventName, eventClass); } + @Override + public void removeEventListener(DataListener listener) { + List needRemove = new ArrayList(); + + for (Map.Entry> entry : eventListeners.entrySet()) { + if(entry.getValue().getListeners().contains(listener)){ + entry.getValue().getListeners().remove(listener); + } + if(entry.getValue().getListeners().size() == 0){ + needRemove.add(entry.getKey()); + } + } + + for(String eventName : needRemove){ + eventListeners.remove(eventName); + jsonSupport.removeEventMapping(name, eventName); + } + } + @Override public void addEventInterceptor(EventInterceptor eventInterceptor) { eventInterceptors.add(eventInterceptor); } + @Override + public void removeEventInterceptor(EventInterceptor eventInterceptor) { + eventInterceptors.remove(eventInterceptor); + } + @SuppressWarnings({"rawtypes", "unchecked"}) public void onEvent(NamespaceClient client, String eventName, List args, AckRequest ackRequest) { EventEntry entry = eventListeners.get(eventName); @@ -184,6 +208,11 @@ public void addDisconnectListener(DisconnectListener listener) { disconnectListeners.add(listener); } + @Override + public void removeDisconnectListener(DisconnectListener listener) { + disconnectListeners.remove(listener); + } + public void onDisconnect(SocketIOClient client) { Set joinedRooms = client.getAllRooms(); allClients.remove(client.getSessionId()); @@ -209,6 +238,11 @@ public void addConnectListener(ConnectListener listener) { connectListeners.add(listener); } + @Override + public void removeConnectListener(ConnectListener listener) { + connectListeners.remove(listener); + } + public void onConnect(SocketIOClient client) { join(getName(), client.getSessionId()); storeFactory.pubSubStore().publish(PubSubType.JOIN, new JoinLeaveMessage(client.getSessionId(), getName(), getName())); @@ -227,6 +261,11 @@ public void addPingListener(PingListener listener) { pingListeners.add(listener); } + @Override + public void removePingListener(PingListener listener) { + pingListeners.remove(listener); + } + public void onPing(SocketIOClient client) { try { for (PingListener listener : pingListeners) { diff --git a/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java b/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java index 43e97ec7c..cbea30c99 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java @@ -122,7 +122,12 @@ public void disconnect() { Packet packet = new Packet(PacketType.MESSAGE); packet.setSubType(PacketType.DISCONNECT); send(packet); -// onDisconnect(); + //onDisconnect(); + } + + @Override + public void close() { + getBaseClient().disconnect(); } @Override