不同的Message对应不同的业务
消息管理模块
支持多路由调度管理,拥有一个Router集合属性
抽象层
type IMsgHandler interface {
//添加路由的方法
AddRouter(msgID uint32, router IRouter)
//调度路由的方法
DoMsgHandler(request ziface,IRequest)
}
实现层
属性
//路由集合
map[uint32] router
方法
添加路由的方法
//添加路由的方法
func (ms *MsgHandler)AddRouter(msgID uint32, router ziface.IRouter) {
//判断msgid 是否存在
if _, ok := ms.routers[msgID]; ok {
fmt.Println("该绑定已经存在, msgID:", msgID)
return
}
//添加msgid和router的对应关系
ms.routers[msgID] = router
return
}
调度路由的方法
//调度路由的方法
func (ms *MsgHandler)DoMsgHandler(request ziface.IRequest) {
//取出路由
router := ms.routers[request.GetMessage().GetMsgId()]
//执行方法
router.PreHandle(request)
router.Handle(request)
router.PostHandle(request)
}
修改
改修connection模块
结构体
//新增
//消息管理模块 多路由
msgHandler ziface.IMsgHandler
构造函数
//创建一个新的连接
func NewConnection(conn *net.TCPConn, connID uint32, msgHandler ziface.IMsgHandler) ziface.IConnection {
c := &Connection{
conn:conn,
connID:connID,
isClosed:false,
msgHandler: msgHandler,
}
return c
}
方法
//针对链接读业务的方法
func (c *Connection) startReader() {
//新增
//路由处理业务
go c.msgHandler.DoMsgHandler(req)
}
修改server模块
结构体
//新增
//消息管理模块 多路由
msgHandler ziface.IMsgHandler
构造函数
func NewServer() ziface.IServer {
return &Server{
//新增
msgHandler:NewMsgHandler(),
}
}
添加路由方法
func (s *Server) AddRouter(msgID uint32, router ziface.IRouter) {
s.msgHandler.AddRouter(msgID, router)
fmt.Println("add router success!")
}