fix: group filter touch provider

This commit is contained in:
adlyq 2022-06-07 17:19:25 +08:00 committed by Skyxim
parent e995003c27
commit 0a4570b55c
5 changed files with 16 additions and 26 deletions

View File

@ -51,10 +51,9 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
var proxies []C.Proxy var proxies []C.Proxy
for _, pd := range gb.providers { for _, pd := range gb.providers {
if touch { if touch {
proxies = append(proxies, pd.ProxiesWithTouch()...) pd.Touch()
} else {
proxies = append(proxies, pd.Proxies()...)
} }
proxies = append(proxies, pd.Proxies()...)
} }
if len(proxies) == 0 { if len(proxies) == 0 {
return append(proxies, tunnel.Proxies()["COMPATIBLE"]) return append(proxies, tunnel.Proxies()["COMPATIBLE"])
@ -63,13 +62,12 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
} }
for _, pd := range gb.providers { for _, pd := range gb.providers {
if pd.VehicleType() == types.Compatible {
if touch { if touch {
gb.proxies.Store(pd.Name(), pd.ProxiesWithTouch()) pd.Touch()
} else {
gb.proxies.Store(pd.Name(), pd.Proxies())
} }
if pd.VehicleType() == types.Compatible {
gb.proxies.Store(pd.Name(), pd.Proxies())
gb.versions.Store(pd.Name(), pd.Version()) gb.versions.Store(pd.Name(), pd.Version())
continue continue
} }
@ -80,11 +78,7 @@ func (gb *GroupBase) GetProxies(touch bool) []C.Proxy {
newProxies []C.Proxy newProxies []C.Proxy
) )
if touch {
proxies = pd.ProxiesWithTouch()
} else {
proxies = pd.Proxies() proxies = pd.Proxies()
}
for _, p := range proxies { for _, p := range proxies {
if mat, _ := gb.filter.FindStringMatch(p.Name()); mat != nil { if mat, _ := gb.filter.FindStringMatch(p.Name()); mat != nil {

View File

@ -75,9 +75,11 @@ func ParseProxyGroup(config map[string]any, proxyMap map[string]C.Proxy, provide
providers = append(providers, pd) providers = append(providers, pd)
providersMap[groupName] = pd providersMap[groupName] = pd
} else { } else {
if groupOption.URL == "" || groupOption.Interval == 0 { if groupOption.URL == "" {
//return nil, errMissHealthCheck
groupOption.URL = "http://www.gstatic.com/generate_204" groupOption.URL = "http://www.gstatic.com/generate_204"
}
if groupOption.Interval == 0 {
groupOption.Interval = 300 groupOption.Interval = 300
} }

View File

@ -32,9 +32,7 @@ func (hc *HealthCheck) process() {
ticker := time.NewTicker(time.Duration(hc.interval) * time.Second) ticker := time.NewTicker(time.Duration(hc.interval) * time.Second)
go func() { go func() {
t := time.NewTicker(30 * time.Second) time.Sleep(30 * time.Second)
<-t.C
t.Stop()
hc.check() hc.check()
}() }()

View File

@ -84,9 +84,8 @@ func (pp *proxySetProvider) Proxies() []C.Proxy {
return pp.proxies return pp.proxies
} }
func (pp *proxySetProvider) ProxiesWithTouch() []C.Proxy { func (pp *proxySetProvider) Touch() {
pp.healthCheck.touch() pp.healthCheck.touch()
return pp.Proxies()
} }
func (pp *proxySetProvider) setProxies(proxies []C.Proxy) { func (pp *proxySetProvider) setProxies(proxies []C.Proxy) {
@ -178,9 +177,8 @@ func (cp *compatibleProvider) Proxies() []C.Proxy {
return cp.proxies return cp.proxies
} }
func (cp *compatibleProvider) ProxiesWithTouch() []C.Proxy { func (cp *compatibleProvider) Touch() {
cp.healthCheck.touch() cp.healthCheck.touch()
return cp.Proxies()
} }
func stopCompatibleProvider(pd *CompatibleProvider) { func stopCompatibleProvider(pd *CompatibleProvider) {

View File

@ -66,9 +66,7 @@ type Provider interface {
type ProxyProvider interface { type ProxyProvider interface {
Provider Provider
Proxies() []C.Proxy Proxies() []C.Proxy
// ProxiesWithTouch is used to inform the provider that the proxy is actually being used while getting the list of proxies. Touch()
// Commonly used in DialContext and DialPacketConn
ProxiesWithTouch() []C.Proxy
HealthCheck() HealthCheck()
Version() uint Version() uint
} }