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.
71 lines
1.6 KiB
71 lines
1.6 KiB
|
1 year ago
|
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
|
||
|
|
})
|
||
|
|
}
|
||
|
|
)
|