package router import "strings" var ( //消息对应的路由规则,消息流转 routeByMsgName = map[string]*MsgRouteRule{} routeByMsgID = map[int]*MsgRouteRule{} ) const ( //1局部跨服 2全局跨服 CrossMode_Type_Section = 1 CrossMode_Type_Global = 2 ) //消息路由节点 type MsgRouteRule struct { MsgName string //消息名称 ServiceName string //路由到的服务器 Mod string MsgID int CrossMode int32 //1局部跨服 2全局跨服 } type MsgRouteList struct { Rules []*MsgRouteRule } //添加路由信息 func AddRouteRule(rule *MsgRouteRule) { if rule.MsgID == 0 { panic("routerule msgid = 0, run MakeProto.sh please") } //是否需要跨服 if strings.Contains(rule.Mod, "cross") { rule.CrossMode = CrossMode_Type_Section } if strings.Contains(rule.Mod, "gcross") { rule.CrossMode = CrossMode_Type_Global } routeByMsgName[rule.MsgName] = rule routeByMsgID[rule.MsgID] = rule } func ClearRuteRUle() { routeByMsgName = map[string]*MsgRouteRule{} routeByMsgID = map[int]*MsgRouteRule{} } func GetRuleByMsgID(msgId int) *MsgRouteRule { if rule, ok := routeByMsgID[msgId]; ok { return rule } return nil } func GetRuleByMsgName(msgName string) *MsgRouteRule { if rule, ok := routeByMsgName[msgName]; ok { return rule } return nil }