You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
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 |
|
}) |
|
} |
|
)
|
|
|