diff --git a/adapter/provider/provider.go b/adapter/provider/provider.go index a99c1d968..923cddbad 100644 --- a/adapter/provider/provider.go +++ b/adapter/provider/provider.go @@ -98,6 +98,10 @@ func (pp *proxySetProvider) Proxies() []C.Proxy { return pp.proxies } +func (pp *proxySetProvider) Count() int { + return len(pp.proxies) +} + func (pp *proxySetProvider) Touch() { pp.healthCheck.touch() } @@ -267,6 +271,10 @@ func (cp *compatibleProvider) Proxies() []C.Proxy { return cp.proxies } +func (cp *compatibleProvider) Count() int { + return len(cp.proxies) +} + func (cp *compatibleProvider) Touch() { cp.healthCheck.touch() } diff --git a/constant/provider/interface.go b/constant/provider/interface.go index 911f774a6..880bdadff 100644 --- a/constant/provider/interface.go +++ b/constant/provider/interface.go @@ -71,6 +71,7 @@ type Provider interface { type ProxyProvider interface { Provider Proxies() []constant.Proxy + Count() int // Touch is used to inform the provider that the proxy is actually being used while getting the list of proxies. // Commonly used in DialContext and DialPacketConn Touch()