msg_router.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package router
  2. import "strings"
  3. var (
  4. //消息对应的路由规则,消息流转
  5. routeByMsgName = map[string]*MsgRouteRule{}
  6. routeByMsgID = map[int]*MsgRouteRule{}
  7. )
  8. const (
  9. //1局部跨服 2全局跨服
  10. CrossMode_Type_Section = 1
  11. CrossMode_Type_Global = 2
  12. )
  13. //消息路由节点
  14. type MsgRouteRule struct {
  15. MsgName string //消息名称
  16. ServiceName string //路由到的服务器
  17. Mod string
  18. MsgID int
  19. CrossMode int32 //1局部跨服 2全局跨服
  20. }
  21. type MsgRouteList struct {
  22. Rules []*MsgRouteRule
  23. }
  24. //添加路由信息
  25. func AddRouteRule(rule *MsgRouteRule) {
  26. if rule.MsgID == 0 {
  27. panic("routerule msgid = 0, run MakeProto.sh please")
  28. }
  29. //是否需要跨服
  30. if strings.Contains(rule.Mod, "cross") {
  31. rule.CrossMode = CrossMode_Type_Section
  32. }
  33. if strings.Contains(rule.Mod, "gcross") {
  34. rule.CrossMode = CrossMode_Type_Global
  35. }
  36. routeByMsgName[rule.MsgName] = rule
  37. routeByMsgID[rule.MsgID] = rule
  38. }
  39. func ClearRuteRUle() {
  40. routeByMsgName = map[string]*MsgRouteRule{}
  41. routeByMsgID = map[int]*MsgRouteRule{}
  42. }
  43. func GetRuleByMsgID(msgId int) *MsgRouteRule {
  44. if rule, ok := routeByMsgID[msgId]; ok {
  45. return rule
  46. }
  47. return nil
  48. }
  49. func GetRuleByMsgName(msgName string) *MsgRouteRule {
  50. if rule, ok := routeByMsgName[msgName]; ok {
  51. return rule
  52. }
  53. return nil
  54. }