42 lines
934 B
Go
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)
|
|
}
|