Files
EdgeNode/internal/configs/node_config.go
2020-07-21 11:18:47 +08:00

63 lines
1.2 KiB
Go

package configs
import (
"github.com/go-yaml/yaml"
"github.com/iwind/TeaGo/Tea"
"io/ioutil"
)
var sharedNodeConfig *NodeConfig = nil
type NodeConfig struct {
Id string `yaml:"id"`
Servers []*ServerConfig `yaml:"servers"`
}
func SharedNodeConfig() (*NodeConfig, error) {
sharedLocker.Lock()
defer sharedLocker.Unlock()
if sharedNodeConfig != nil {
return sharedNodeConfig, nil
}
data, err := ioutil.ReadFile(Tea.ConfigFile("node.yaml"))
if err != nil {
return &NodeConfig{}, err
}
config := &NodeConfig{}
err = yaml.Unmarshal(data, &config)
if err != nil {
return &NodeConfig{}, err
}
sharedNodeConfig = config
return config, nil
}
// 根据网络地址和协议分组
func (this *NodeConfig) AvailableGroups() []*ServerGroup {
groupMapping := map[string]*ServerGroup{} // protocol://addr => Server Group
for _, server := range this.Servers {
if !server.IsOn {
continue
}
for _, addr := range server.FullAddresses() {
group, ok := groupMapping[addr]
if ok {
group.Add(server)
} else {
group = NewServerGroup(addr)
group.Add(server)
}
groupMapping[addr] = group
}
}
result := []*ServerGroup{}
for _, group := range groupMapping {
result = append(result, group)
}
return result
}