package router import ( "errors" "leafstalk/module" "leafstalk/router/json" "reflect" ) type MsgRegister struct { skeleton *module.Skeleton processor *json.Processor } func NewRegister(skeleton *module.Skeleton, processor *json.Processor) *MsgRegister { mg := new(MsgRegister) mg.skeleton = skeleton mg.processor = processor return mg } //handleMsg 消息结构体注册处理函数,并路由到这里 func (m *MsgRegister) HandleMsg(msg interface{}, h interface{}) *MsgRegister { //设置处理函数 m.skeleton.RegisterChanRPC(reflect.TypeOf(msg), h) //消息路由目标是本模块 m.processor.Register(msg) m.processor.SetRouter(msg, m.skeleton.HandlerServer) return m } //HandleMsgNoRouter 消息结构体注册处理函数,不路由到这里 func (m *MsgRegister) HandleMsgNoRouter(msg interface{}, h interface{}) { //设置处理函数 m.skeleton.RegisterChanRPC(reflect.TypeOf(msg), h) } //RegisterMsg 仅注册消息 func (m *MsgRegister) RegisterMsg(msg interface{}) { m.processor.Register(msg) } //HandleRpcMsg 进程内模块间消息注册 func (m *MsgRegister) HandleRpcMsg(msg interface{}, h interface{}) error { msgType := reflect.TypeOf(msg) if msgType == nil || msgType.Kind() != reflect.Ptr { return errors.New("json message pointer required") } msgID := msgType.Elem().Name() m.skeleton.RegisterChanRPC(msgID, h) return nil }