From d3f63cb9d879bbc185b9117d568db5a9775181d9 Mon Sep 17 00:00:00 2001 From: lovebing Date: Thu, 8 Feb 2018 15:39:55 +0800 Subject: [PATCH] add PingListener --- .../socketio/SocketIOServer.java | 11 +++++---- .../socketio/handler/PacketListener.java | 2 ++ .../socketio/listener/ClientListeners.java | 2 ++ .../listener/DefaultExceptionListener.java | 5 ++++ .../socketio/listener/ExceptionListener.java | 2 ++ .../socketio/listener/PingListener.java | 24 +++++++++++++++++++ .../socketio/namespace/Namespace.java | 22 +++++++++++++---- 7 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/corundumstudio/socketio/listener/PingListener.java diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java index efa5638..18069f7 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java @@ -15,6 +15,7 @@ */ package com.corundumstudio.socketio; +import com.corundumstudio.socketio.listener.*; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; @@ -34,11 +35,6 @@ import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.corundumstudio.socketio.listener.ClientListeners; -import com.corundumstudio.socketio.listener.ConnectListener; -import com.corundumstudio.socketio.listener.DataListener; -import com.corundumstudio.socketio.listener.DisconnectListener; -import com.corundumstudio.socketio.listener.MultiTypeEventListener; import com.corundumstudio.socketio.namespace.Namespace; import com.corundumstudio.socketio.namespace.NamespacesHub; @@ -246,6 +242,11 @@ public class SocketIOServer implements ClientListeners { mainNamespace.addConnectListener(listener); } + @Override + public void addPingListeners(PingListener pingListener) { + mainNamespace.addPingListeners(pingListener); + } + @Override public void addListeners(Object listeners) { mainNamespace.addListeners(listeners); diff --git a/src/main/java/com/corundumstudio/socketio/handler/PacketListener.java b/src/main/java/com/corundumstudio/socketio/handler/PacketListener.java index f442f81..abbc4e8 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/PacketListener.java +++ b/src/main/java/com/corundumstudio/socketio/handler/PacketListener.java @@ -62,6 +62,8 @@ public class PacketListener { } else { client.getBaseClient().schedulePingTimeout(); } + Namespace namespace = namespacesHub.get(packet.getNsp()); + namespace.onPing(client); break; } diff --git a/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java b/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java index 556d645..faaeac3 100644 --- a/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java +++ b/src/main/java/com/corundumstudio/socketio/listener/ClientListeners.java @@ -25,6 +25,8 @@ public interface ClientListeners { void addConnectListener(ConnectListener listener); + void addPingListeners(PingListener pingListener); + void addListeners(Object listeners); void addListeners(Object listeners, Class listenersClass); diff --git a/src/main/java/com/corundumstudio/socketio/listener/DefaultExceptionListener.java b/src/main/java/com/corundumstudio/socketio/listener/DefaultExceptionListener.java index 684195b..7998aa2 100644 --- a/src/main/java/com/corundumstudio/socketio/listener/DefaultExceptionListener.java +++ b/src/main/java/com/corundumstudio/socketio/listener/DefaultExceptionListener.java @@ -43,6 +43,11 @@ public class DefaultExceptionListener extends ExceptionListenerAdapter { log.error(e.getMessage(), e); } + @Override + public void onPingException(Exception e, SocketIOClient client) { + log.error(e.getMessage(), e); + } + @Override public boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception { log.error(e.getMessage(), e); diff --git a/src/main/java/com/corundumstudio/socketio/listener/ExceptionListener.java b/src/main/java/com/corundumstudio/socketio/listener/ExceptionListener.java index 8d50038..7a35053 100644 --- a/src/main/java/com/corundumstudio/socketio/listener/ExceptionListener.java +++ b/src/main/java/com/corundumstudio/socketio/listener/ExceptionListener.java @@ -29,6 +29,8 @@ public interface ExceptionListener { void onConnectException(Exception e, SocketIOClient client); + void onPingException(Exception e, SocketIOClient client); + boolean exceptionCaught(ChannelHandlerContext ctx, Throwable e) throws Exception; } diff --git a/src/main/java/com/corundumstudio/socketio/listener/PingListener.java b/src/main/java/com/corundumstudio/socketio/listener/PingListener.java new file mode 100644 index 0000000..eca2c71 --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/listener/PingListener.java @@ -0,0 +1,24 @@ +/** + * Copyright 2012 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.corundumstudio.socketio.listener; + +import com.corundumstudio.socketio.SocketIOClient; + +public interface PingListener { + + void onPing(SocketIOClient client); + +} diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index e288f6f..b9394a5 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -34,11 +34,7 @@ import com.corundumstudio.socketio.MultiTypeArgs; import com.corundumstudio.socketio.SocketIOClient; import com.corundumstudio.socketio.SocketIONamespace; import com.corundumstudio.socketio.annotation.ScannerEngine; -import com.corundumstudio.socketio.listener.ConnectListener; -import com.corundumstudio.socketio.listener.DataListener; -import com.corundumstudio.socketio.listener.DisconnectListener; -import com.corundumstudio.socketio.listener.ExceptionListener; -import com.corundumstudio.socketio.listener.MultiTypeEventListener; +import com.corundumstudio.socketio.listener.*; import com.corundumstudio.socketio.protocol.JsonSupport; import com.corundumstudio.socketio.protocol.Packet; import com.corundumstudio.socketio.store.StoreFactory; @@ -62,6 +58,7 @@ public class Namespace implements SocketIONamespace { private final ConcurrentMap> eventListeners = PlatformDependent.newConcurrentHashMap(); private final Queue connectListeners = new ConcurrentLinkedQueue(); private final Queue disconnectListeners = new ConcurrentLinkedQueue(); + private final Queue pingListeners = new ConcurrentLinkedQueue(); private final Map allClients = PlatformDependent.newConcurrentHashMap(); private final ConcurrentMap> roomClients = PlatformDependent.newConcurrentHashMap(); @@ -215,6 +212,21 @@ public class Namespace implements SocketIONamespace { } } + @Override + public void addPingListeners(PingListener pingListener) { + pingListeners.add(pingListener); + } + + public void onPing(SocketIOClient client) { + try { + for (PingListener listener : pingListeners) { + listener.onPing(client); + } + } catch (Exception e) { + exceptionListener.onPingException(e, client); + } + } + @Override public BroadcastOperations getBroadcastOperations() { return new BroadcastOperations(allClients.values(), storeFactory);