Frp/servers.go
2024-12-27 19:41:54 +08:00

88 lines
1.9 KiB
Go

package main
import (
"fmt"
"Go_Test/config"
)
// InitRedis 初始化Redis连接
func InitRedis() error {
var err error
RedisClient, err = config.NewRedisClient(0)
if err != nil {
return fmt.Errorf("failed to initialize Redis: %v", err)
}
return nil
}
// 读取 Frp 服务器数量
func GetFrpServerNum() int {
keys, err := RedisClient.Keys(ctx, "Frp*").Result()
if err != nil {
fmt.Printf("获取frp前缀的key失败: %v\n", err)
return 0
}
return len(keys)
}
// 获取 redis 中的 frp 数据用 json 格式输出
func GetFrpServerInfo() {
// 获取所有 frp 服务器名称
keys, err := RedisClient.Keys(ctx, "Frp*").Result()
if err != nil {
fmt.Printf("获取frp前缀的key失败: %v\n", err)
return
}
// 遍历所有 frp 服务器信息
for _, key := range keys {
// 存储在结构体中
frps, err := RedisClient.HGetAll(ctx, key).Result()
if err != nil {
fmt.Printf("获取frp前缀的key失败: %v\n", err)
return
}
// 将 frp 信息添加到 servers 中
server := config.ServerConfigJson{
Host: frps["Host"],
Port: frps["Port"],
Token: frps["Token"],
}
servers[key] = server
}
}
// 获取所有 Frp 服务器信息
func GetAllFrpServerInfo() {
for i := 1; i <= GetFrpServerNum(); i++ {
key := fmt.Sprintf("Frp%d", i)
// 使用HGet获取hash中的字段值
host, err := RedisClient.HGet(ctx, key, "Host").Result()
if err != nil {
fmt.Printf("获取Frp%d Host失败: %v\n", i, err)
continue
}
port, err := RedisClient.HGet(ctx, key, "Port").Result()
if err != nil {
fmt.Printf("获取Frp%d Port失败: %v\n", i, err)
continue
}
token, err := RedisClient.HGet(ctx, key, "Token").Result()
if err != nil {
fmt.Printf("获取Frp%d Token失败: %v\n", i, err)
continue
}
// 将服务器信息添加到ServerConfig中
ServerConfig = append(ServerConfig, config.ServerConfig{
Host: host,
Port: port,
Token: token,
})
}
}