go-study/zinx/znet/msghandler.go
2025-09-14 16:22:50 +08:00

42 lines
934 B
Go

package znet
import (
"fmt"
"go-study/zinx/ziface"
)
type MsgHandle struct {
// 存放每个 MsgID 所对应的处理方法
Apis map[uint32]ziface.IRouter
}
// NewMsgHandle 创建一个 MsgHandle
func NewMsgHandle() *MsgHandle {
return &MsgHandle{
Apis: make(map[uint32]ziface.IRouter),
}
}
// DoMsgHandler 执行对应的路由方法
func (mh *MsgHandle) DoMsgHandler(request ziface.IRequest) {
router, ok := mh.Apis[request.GetMsgID()]
if !ok {
fmt.Println("api msgID = ", request.GetMsgID(), " is not found!")
return
}
// 执行对应的处理方法
router.PreHandle(request)
router.Handle(request)
router.PostHandle(request)
}
// AddRouter 为消息添加具体的处理逻辑
func (mh *MsgHandle) AddRouter(msgID uint32, router ziface.IRouter) {
if _, ok := mh.Apis[msgID]; ok {
panic("repeated api, msgID = " + fmt.Sprint(msgID))
}
mh.Apis[msgID] = router
fmt.Println("Add api msgID = ", msgID)
}