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