router.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package router
  2. import (
  3. "errors"
  4. "leafstalk/module"
  5. "leafstalk/router/json"
  6. "reflect"
  7. )
  8. type MsgRegister struct {
  9. skeleton *module.Skeleton
  10. processor *json.Processor
  11. }
  12. func NewRegister(skeleton *module.Skeleton, processor *json.Processor) *MsgRegister {
  13. mg := new(MsgRegister)
  14. mg.skeleton = skeleton
  15. mg.processor = processor
  16. return mg
  17. }
  18. //handleMsg 消息结构体注册处理函数,并路由到这里
  19. func (m *MsgRegister) HandleMsg(msg interface{}, h interface{}) *MsgRegister {
  20. //设置处理函数
  21. m.skeleton.RegisterChanRPC(reflect.TypeOf(msg), h)
  22. //消息路由目标是本模块
  23. m.processor.Register(msg)
  24. m.processor.SetRouter(msg, m.skeleton.HandlerServer)
  25. return m
  26. }
  27. //HandleMsgNoRouter 消息结构体注册处理函数,不路由到这里
  28. func (m *MsgRegister) HandleMsgNoRouter(msg interface{}, h interface{}) {
  29. //设置处理函数
  30. m.skeleton.RegisterChanRPC(reflect.TypeOf(msg), h)
  31. }
  32. //RegisterMsg 仅注册消息
  33. func (m *MsgRegister) RegisterMsg(msg interface{}) {
  34. m.processor.Register(msg)
  35. }
  36. //HandleRpcMsg 进程内模块间消息注册
  37. func (m *MsgRegister) HandleRpcMsg(msg interface{}, h interface{}) error {
  38. msgType := reflect.TypeOf(msg)
  39. if msgType == nil || msgType.Kind() != reflect.Ptr {
  40. return errors.New("json message pointer required")
  41. }
  42. msgID := msgType.Elem().Name()
  43. m.skeleton.RegisterChanRPC(msgID, h)
  44. return nil
  45. }