From 0f54f79351c025b29db9c30bff5a07685b3c7c83 Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 16 May 2024 17:15:30 +0800 Subject: [PATCH 1/2] feat[net]:modify the access modifier --- net/src/main/java/com/zfoo/net/router/Router.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index 283bdc15..f040925a 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -62,14 +62,14 @@ public class Router implements IRouter { public static final long DEFAULT_TIMEOUT = 3000; - private final ShortObjectHashMap receiverMap = new ShortObjectHashMap<>(); + protected final ShortObjectHashMap receiverMap = new ShortObjectHashMap<>(); /** * 作为服务器接收方,会把receive收到的attachment存储在这个地方,只针对task线程。 * atReceiver会设置attachment,但是在方法调用完成会取消,不需要过多关注。 * asyncAsk会再次设置attachment,需要重点关注。 */ - private final FastThreadLocalAdapter serverReceiverAttachmentThreadLocal = new FastThreadLocalAdapter<>(); + protected final FastThreadLocalAdapter serverReceiverAttachmentThreadLocal = new FastThreadLocalAdapter<>(); /** * 在服务端收到数据后,会调用这个方法. 这个方法在BaseRouteHandler.java的channelRead中被调用 From 14e7aedbf15f6ff34a70757307b4cdfe2e08d36f Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 16 May 2024 18:35:18 +0800 Subject: [PATCH 2/2] feat[net]:add exception handler --- .../main/java/com/zfoo/net/router/Router.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index f040925a..dc2bafe9 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -370,16 +370,29 @@ public class Router implements IRouter { receiver.invoke(session, packet, attachment); } catch (Exception e) { - EventBus.post(ServerExceptionEvent.valueOf(session, packet, attachment, e)); - logger.error("at{} e[uid:{}][sid:{}] invoke exception", StringUtils.capitalize(packet.getClass().getSimpleName()), session.getUid(), session.getSid(), e); + exceptionHandler(e, packetReceiverTask); } catch (Throwable t) { - logger.error("at{} e[uid:{}][sid:{}] invoke error", StringUtils.capitalize(packet.getClass().getSimpleName()), session.getUid(), session.getSid(), t); + throwableHandler(t, packetReceiverTask); } finally { // 如果有服务器在处理同步或者异步消息的时候由于错误没有返回给客户端消息,则可能会残留serverAttachment,所以先移除 serverReceiverAttachmentThreadLocal.set(null); } } + protected void exceptionHandler(Exception e, PacketReceiverTask packetReceiverTask){ + var session = packetReceiverTask.getSession(); + var packet = packetReceiverTask.getPacket(); + var attachment = packetReceiverTask.getAttachment(); + EventBus.post(ServerExceptionEvent.valueOf(session, packet, attachment, e)); + logger.error("at{} e[uid:{}][sid:{}] invoke exception", StringUtils.capitalize(packet.getClass().getSimpleName()), session.getUid(), session.getSid(), e); + } + + protected void throwableHandler(Throwable t, PacketReceiverTask packetReceiverTask){ + var session = packetReceiverTask.getSession(); + var packet = packetReceiverTask.getPacket(); + logger.error("at{} e[uid:{}][sid:{}] invoke error", StringUtils.capitalize(packet.getClass().getSimpleName()), session.getUid(), session.getSid(), t); + } + @Override public void registerPacketReceiverDefinition(Object bean) {