@@ -113,12 +113,11 @@ func ApplyConfig(cfg *config.Config, force bool) {
113113 tunnel .OnInnerLoading ()
114114
115115 initInnerTcp ()
116- loadProxyProvider (cfg .Providers )
116+ loadProvider (cfg .Providers )
117117 updateProfile (cfg )
118- loadRuleProvider (cfg .RuleProviders )
118+ loadProvider (cfg .RuleProviders )
119119 runtime .GC ()
120120 tunnel .OnRunning ()
121- hcCompatibleProvider (cfg .Providers )
122121 updateUpdater (cfg )
123122
124123 resolver .ResetConnection ()
@@ -303,79 +302,40 @@ func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map
303302 tunnel .UpdateRules (rules , subRules , ruleProviders )
304303}
305304
306- func loadProvider (pv provider.Provider ) {
307- if pv .VehicleType () == provider .Compatible {
308- return
309- } else {
310- log .Infoln ("Start initial provider %s" , (pv ).Name ())
311- }
305+ func loadProvider [P provider.Provider ](providers map [string ]P ) {
306+ load := func (pv P ) {
307+ name := pv .Name ()
308+ if pv .VehicleType () == provider .Compatible {
309+ log .Infoln ("Start initial compatible provider %s" , name )
310+ } else {
311+ log .Infoln ("Start initial provider %s" , name )
312+ }
312313
313- if err := pv .Initial (); err != nil {
314- switch pv .Type () {
315- case provider .Proxy :
316- {
317- log .Errorln ("initial proxy provider %s error: %v" , (pv ).Name (), err )
318- }
319- case provider .Rule :
320- {
321- log .Errorln ("initial rule provider %s error: %v" , (pv ).Name (), err )
314+ if err := pv .Initial (); err != nil {
315+ switch pv .Type () {
316+ case provider .Proxy :
317+ {
318+ log .Errorln ("initial proxy provider %s error: %v" , name , err )
319+ }
320+ case provider .Rule :
321+ {
322+ log .Errorln ("initial rule provider %s error: %v" , name , err )
323+ }
322324 }
323-
324325 }
325326 }
326- }
327-
328- func loadRuleProvider (ruleProviders map [string ]provider.RuleProvider ) {
329- wg := sync.WaitGroup {}
330- ch := make (chan struct {}, concurrentCount )
331- for _ , ruleProvider := range ruleProviders {
332- ruleProvider := ruleProvider
333- wg .Add (1 )
334- ch <- struct {}{}
335- go func () {
336- defer func () { <- ch ; wg .Done () }()
337- loadProvider (ruleProvider )
338-
339- }()
340- }
341327
342- wg .Wait ()
343- }
344-
345- func loadProxyProvider (proxyProviders map [string ]provider.ProxyProvider ) {
346- // limit concurrent size
347328 wg := sync.WaitGroup {}
348329 ch := make (chan struct {}, concurrentCount )
349- for _ , proxyProvider := range proxyProviders {
350- proxyProvider := proxyProvider
330+ for _ , pv := range providers {
331+ pv := pv
351332 wg .Add (1 )
352333 ch <- struct {}{}
353334 go func () {
354335 defer func () { <- ch ; wg .Done () }()
355- loadProvider ( proxyProvider )
336+ load ( pv )
356337 }()
357338 }
358-
359- wg .Wait ()
360- }
361- func hcCompatibleProvider (proxyProviders map [string ]provider.ProxyProvider ) {
362- // limit concurrent size
363- wg := sync.WaitGroup {}
364- ch := make (chan struct {}, concurrentCount )
365- for _ , proxyProvider := range proxyProviders {
366- proxyProvider := proxyProvider
367- if proxyProvider .VehicleType () == provider .Compatible {
368- log .Infoln ("Start initial Compatible provider %s" , proxyProvider .Name ())
369- wg .Add (1 )
370- ch <- struct {}{}
371- go func () {
372- defer func () { <- ch ; wg .Done () }()
373- if err := proxyProvider .Initial (); err != nil {
374- log .Errorln ("initial Compatible provider %s error: %v" , proxyProvider .Name (), err )
375- }
376- }()
377- }
378- }
379339 wg .Wait ()
380340}
381341
0 commit comments