Files
mayfly-go/server/internal/machine/mcm/client_cache.go
2026-02-01 13:35:23 +08:00

46 lines
1.1 KiB
Go

package mcm
import (
"context"
"fmt"
"mayfly-go/pkg/pool"
)
var (
poolGroup = pool.NewPoolGroup[*Cli]()
)
// 从缓存中获取客户端信息,不存在则回调获取机器信息函数,并新建。
// @param 机器的授权凭证名
func GetMachineCli(ctx context.Context, authCertName string, getMachine func(string) (*MachineInfo, error)) (*Cli, error) {
pool, err := poolGroup.GetCachePool(authCertName, func() (*Cli, error) {
mi, err := getMachine(authCertName)
if err != nil {
return nil, err
}
mi.Key = authCertName
return mi.Conn(context.Background())
})
if err != nil {
return nil, err
}
// 从连接池中获取一个可用的连接
return pool.Get(ctx)
}
// 删除指定机器缓存客户端,并关闭客户端连接
func DeleteCli(id uint64) {
for _, p := range poolGroup.AllPool() {
conn, err := p.Get(context.Background(), pool.WithGetNoUpdateLastActive(), pool.WithGetNoNewConn())
if err != nil {
continue
}
if conn.Info.Id == id {
poolGroup.Close(conn.Info.AuthCertName)
}
}
// 删除隧道
tunnelPoolGroup.Close(fmt.Sprintf("machine-tunnel-%d", id))
}