package call import ( "strconv" "github.com/liangdas/mqant/registry" "github.com/liangdas/mqant/selector" ) func GetGameOriginID(id int) int { return id / 100 * 100 } // 选择器 var ( WorkIDSelector = func(nodeID string) selector.SelectOption { return selector.WithFilter(func(services []*registry.Service) []*registry.Service { // log.Debug("nodeID:%v", nodeID) ret := []*registry.Service{} for _, service := range services { nodes := []*registry.Node{} for _, node := range service.Nodes { if node.Metadata["workID"] == nodeID { // log.Debug("find node:%v", node) nodes = append(nodes, node) } } service.Nodes = nodes ret = append(ret, service) } return ret }) } // 服务器版本选择器 VersionSelector = func(nodeID interface{}) selector.SelectOption { return selector.WithFilter(func(services []*registry.Service) []*registry.Service { origin := 0 switch t := nodeID.(type) { case int: origin = t case string: origin, _ = strconv.Atoi(t) default: return services } if origin >= 3000 { origin = GetGameOriginID(origin) } version := GetServerVersion(origin) // log.Debug("nodeID:%v,version:%v", nodeID, version) if version == 0 { return services } ret := []*registry.Service{} for _, service := range services { nodes := []*registry.Node{} for _, node := range service.Nodes { ver, _ := strconv.Atoi(node.Metadata["version"]) if ver == version { // log.Debug("find node:%v", node) nodes = append(nodes, node) } } service.Nodes = nodes ret = append(ret, service) } return ret }) } )