hotgo/server/internal/websocket/router.go

65 lines
1.5 KiB
Go
Raw Normal View History

2022-11-24 23:37:34 +08:00
// Package websocket
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
2022-11-24 23:37:34 +08:00
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package websocket
import (
"context"
2022-11-24 23:37:34 +08:00
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"runtime/debug"
)
// handlerMsg 处理消息
func handlerMsg(client *Client, message []byte) {
defer func() {
if r := recover(); r != nil {
g.Log().Warningf(mctx, "handlerMsg recover, err:%+v, stack:%+v", r, string(debug.Stack()))
2022-11-24 23:37:34 +08:00
}
}()
var request *WRequest
if err := gconv.Struct(message, &request); err != nil {
g.Log().Warningf(mctx, "handlerMsg 数据解析失败,err:%+v, message:%+v", err, string(message))
2022-11-24 23:37:34 +08:00
return
}
if request.Event == "" {
g.Log().Warning(mctx, "handlerMsg request.Event is null")
2022-11-24 23:37:34 +08:00
return
}
fun, ok := routers[request.Event]
if !ok {
g.Log().Warningf(mctx, "handlerMsg function id %v: not registered", request.Event)
2022-11-24 23:37:34 +08:00
return
}
err := msgGo.AddWithRecover(mctx,
func(ctx context.Context) {
fun(client, request)
},
func(ctx context.Context, err error) {
g.Log().Warningf(mctx, "handlerMsg msgGo exec err:%+v", err)
},
)
if err != nil {
g.Log().Warningf(mctx, "handlerMsg msgGo Add err:%+v", err)
return
}
2022-11-24 23:37:34 +08:00
}
// RegisterMsg 注册消息
func RegisterMsg(handlers EventHandlers) {
for id, f := range handlers {
if _, ok := routers[id]; ok {
g.Log().Fatalf(mctx, "RegisterMsg function id %v: already registered", id)
2022-11-24 23:37:34 +08:00
return
}
routers[id] = f
}
}