印度包网
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

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
})
}
)