github.com/chwjbn/xclash@v0.2.0/hub/hub.go (about) 1 package hub 2 3 import ( 4 "github.com/chwjbn/xclash/config" 5 "github.com/chwjbn/xclash/hub/executor" 6 "github.com/chwjbn/xclash/hub/route" 7 ) 8 9 type Option func(*config.Config) 10 11 func WithExternalUI(externalUI string) Option { 12 return func(cfg *config.Config) { 13 cfg.General.ExternalUI = externalUI 14 } 15 } 16 17 func WithExternalController(externalController string) Option { 18 return func(cfg *config.Config) { 19 cfg.General.ExternalController = externalController 20 } 21 } 22 23 func WithSecret(secret string) Option { 24 return func(cfg *config.Config) { 25 cfg.General.Secret = secret 26 } 27 } 28 29 // Parse call at the beginning of clash 30 func Parse(options ...Option) error { 31 cfg, err := executor.Parse() 32 if err != nil { 33 return err 34 } 35 36 for _, option := range options { 37 option(cfg) 38 } 39 40 if cfg.General.ExternalUI != "" { 41 route.SetUIPath(cfg.General.ExternalUI) 42 } 43 44 if cfg.General.ExternalController != "" { 45 go route.Start(cfg.General.ExternalController, cfg.General.Secret) 46 } 47 48 executor.ApplyConfig(cfg, true) 49 return nil 50 }