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) }