From e60017c0ebe7d762a388dc1d51bee5f2306b16d5 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Wed, 20 Dec 2023 10:46:01 +0800 Subject: [PATCH] =?UTF-8?q?other:=20=E4=BC=98=E5=8C=96=20server=20?= =?UTF-8?q?=E5=8C=85=E6=B6=88=E6=81=AF=E5=88=86=E5=8F=91=20cancel=20?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/server.go | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/server/server.go b/server/server.go index 532840b..f8a8ed3 100644 --- a/server/server.go +++ b/server/server.go @@ -702,28 +702,31 @@ func (slf *Server) dispatchMessage(dispatcher *dispatcher, msg *Message) { } present := time.Now() - if msg.t != MessageTypeAsync && msg.t != MessageTypeUniqueAsync && msg.t != MessageTypeShuntAsync && msg.t != MessageTypeUniqueShuntAsync { - defer func(msg *Message) { + defer func(msg *Message) { + super.Handle(cancel) + if msg.t != MessageTypeAsync && msg.t != MessageTypeUniqueAsync && msg.t != MessageTypeShuntAsync && msg.t != MessageTypeUniqueShuntAsync { if err := recover(); err != nil { stack := string(debug.Stack()) log.Error("Server", log.String("MessageType", messageNames[msg.t]), log.String("Info", msg.String()), log.Any("error", err), log.String("stack", stack)) fmt.Println(stack) - slf.OnMessageErrorEvent(msg, fmt.Errorf("%v", err)) + e, ok := err.(error) + if !ok { + e = fmt.Errorf("%v", err) + } + slf.OnMessageErrorEvent(msg, e) } if msg.t == MessageTypeUniqueAsyncCallback || msg.t == MessageTypeUniqueShuntAsyncCallback { dispatcher.antiUnique(msg.name) } - super.Handle(cancel) slf.low(msg, present, time.Millisecond*100) slf.messageCounter.Add(-1) if !slf.isShutdown.Load() { slf.messagePool.Release(msg) } - - }(msg) - } + } + }(msg) switch msg.t { case MessageTypePacket: @@ -753,9 +756,11 @@ func (slf *Server) dispatchMessage(dispatcher *dispatcher, msg *Message) { stack := string(debug.Stack()) log.Error("Server", log.String("MessageType", messageNames[msg.t]), log.Any("error", err), log.String("stack", stack)) fmt.Println(stack) - if e, ok := err.(error); ok { - slf.OnMessageErrorEvent(msg, e) + e, ok := err.(error) + if !ok { + e = fmt.Errorf("%v", err) } + slf.OnMessageErrorEvent(msg, e) } super.Handle(cancel) slf.low(msg, present, time.Second)