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) {