From 920268c632202e895192b2b7667627922b001e53 Mon Sep 17 00:00:00 2001 From: ideaa Date: Fri, 21 Jun 2024 12:14:06 +0800 Subject: [PATCH] feat: add recovery middleware and use negative error codes for system errors - Added a new recovery middleware - Use the negative error codes. --- middlewares/recovery.go | 25 +++++++++++++++++++++++++ ws/dispatcher.go | 6 +++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 middlewares/recovery.go diff --git a/middlewares/recovery.go b/middlewares/recovery.go new file mode 100644 index 0000000..1916e94 --- /dev/null +++ b/middlewares/recovery.go @@ -0,0 +1,25 @@ +package middlewares + +import ( + "runtime/debug" + + "github.com/wonli/aqi/logger" + "github.com/wonli/aqi/ws" +) + +func Recovery() ws.HandlerFunc { + return func(a *ws.Context) { + defer func() { + if err := recover(); err != nil { + // 获取 panic 发生的堆栈跟踪 + stack := debug.Stack() + logger.SugarLog.Errorf("Panic happened: %s \n %s\n", err, stack) + + a.SendCode(-30, "服务维护中") + a.Abort() + } + }() + + a.Next() + } +} diff --git a/ws/dispatcher.go b/ws/dispatcher.go index 0212516..58e2290 100644 --- a/ws/dispatcher.go +++ b/ws/dispatcher.go @@ -20,14 +20,14 @@ func Dispatcher(c *Client, request string) { if c.User != nil { isBanned, bandTime := c.User.IsBanned() if isBanned { - c.SendRawMsg(21, "sys.ban", "You have been ban", bandTime) + c.SendRawMsg(-11, "sys.ban", "You have been ban", bandTime) return } } //请求频率限制5毫秒 if t.Sub(c.LastRequestTime).Microseconds() <= 5 { - c.SendRawMsg(23, "sys.requestLimit", "Your requests are too frequent", nil) + c.SendRawMsg(-13, "sys.requestLimit", "Your requests are too frequent", nil) return } else { //更新最后请求时间 @@ -42,7 +42,7 @@ func Dispatcher(c *Client, request string) { handlers := InitManager().Handlers(action) if handlers == nil || len(handlers) == 0 { - c.SendRawMsg(25, action, "Request not supported", nil) + c.SendRawMsg(-15, action, "Request not supported", nil) return }