From 0cb58ec8416fe3374a5b42feef349b2609a712b0 Mon Sep 17 00:00:00 2001 From: Mmx Date: Wed, 25 Sep 2024 20:47:30 +0800 Subject: [PATCH] improve: login entry logic --- cmd/bitsrun/main.go | 29 ++++----------- internal/controllers/guardian.go | 21 ++--------- internal/controllers/login.go | 61 ++++++++++++++++++++++++++------ 3 files changed, 59 insertions(+), 52 deletions(-) diff --git a/cmd/bitsrun/main.go b/cmd/bitsrun/main.go index da45214..9c03ce9 100644 --- a/cmd/bitsrun/main.go +++ b/cmd/bitsrun/main.go @@ -3,34 +3,19 @@ package main import ( "github.com/Mmx233/BitSrunLoginGo/internal/config" "github.com/Mmx233/BitSrunLoginGo/internal/controllers" - "github.com/Mmx233/BitSrunLoginGo/tools" ) func main() { + logger := config.Logger + if config.Settings.Basic.Interfaces != "" { + logger.Infoln("[多网卡模式]") + } + if config.Settings.Guardian.Enable { //进入守护模式 controllers.Guardian() } else { - //登录流程 - var err error - logger := config.Logger - if config.Settings.Basic.Interfaces == "" { //单网卡 - if err = controllers.Login(nil, false); err != nil { - logger.Errorln("登录出错: ", err) - if !config.Settings.Log.DebugLevel { - logger.Infoln("开启调试日志 (debug_level) 获取详细信息") - } - return - } - } else { //多网卡 - logger.Infoln("多网卡模式") - interfaces, _ := tools.GetInterfaceAddr(logger, config.Settings.Basic.Interfaces) - for _, eth := range interfaces { - logger.Infoln("使用网卡: ", eth.Name) - if err = controllers.Login(ð, false); err != nil { - config.Logger.Errorf("网卡 %s 登录出错: %v", eth.Name, err) - } - } - } + //执行单次流程 + _ = controllers.Login() } } diff --git a/internal/controllers/guardian.go b/internal/controllers/guardian.go index 82e0fe3..40615a6 100644 --- a/internal/controllers/guardian.go +++ b/internal/controllers/guardian.go @@ -2,7 +2,6 @@ package controllers import ( "github.com/Mmx233/BitSrunLoginGo/internal/config" - "github.com/Mmx233/BitSrunLoginGo/tools" "time" ) @@ -10,28 +9,12 @@ import ( func Guardian() { logger := config.Logger - logger.Infoln("[以守护模式启动]") + logger.Infoln("[守护模式]") GuardianDuration := time.Duration(config.Settings.Guardian.Duration) * time.Second for { - if config.Settings.Basic.Interfaces == "" { //单网卡 - err := Login(nil, true) - if err != nil { - logger.Errorln("登录出错: ", err) - } - } else { //多网卡 - interfaces, err := tools.GetInterfaceAddr(logger, config.Settings.Basic.Interfaces) - if err == nil { - for _, eth := range interfaces { - logger.Debugf("使用 %s 网口登录 ", eth.Name) - err = Login(ð, true) - if err != nil { - logger.Errorln("网口 ", eth.Name+" 登录出错: ", err) - } - } - } - } + _ = Login() time.Sleep(GuardianDuration) } } diff --git a/internal/controllers/login.go b/internal/controllers/login.go index 7815faa..eea7c88 100644 --- a/internal/controllers/login.go +++ b/internal/controllers/login.go @@ -11,21 +11,30 @@ import ( "github.com/Mmx233/BitSrunLoginGo/pkg/srun" "github.com/Mmx233/BitSrunLoginGo/tools" "net/http" + "sync" ) -// Login 登录逻辑 -func Login(eth *tools.Eth, debugOutput bool) error { - if config.Settings.Backoff.Enable { - return backoff.NewInstance(func(ctx context.Context) error { - return login(eth, debugOutput) - }, config.BackoffConfig).Run(context.TODO()) - } else { - return login(eth, debugOutput) +var ipLast string +var debugTip sync.Once + +func Login() error { + logger := config.Logger + if config.Settings.Basic.Interfaces == "" { //单网卡 + err := LoginSingle(nil, true) + if err != nil { + logger.Errorln("登录出错: ", err) + debugTip.Do(func() { + if !config.Settings.Log.DebugLevel { + logger.Infoln("开启调试日志 (debug_level) 获取详细信息") + } + }) + } + return err + } else { //多网卡 + return LoginInterfaces() } } -var ipLast string - func ddns(ip string, httpClient *http.Client) error { return dns.Run(&dns.Config{ Logger: config.Logger, @@ -38,7 +47,37 @@ func ddns(ip string, httpClient *http.Client) error { }) } -func login(eth *tools.Eth, debugOutput bool) error { +func LoginInterfaces() error { + logger := config.Logger + interfaces, err := tools.GetInterfaceAddr(logger, config.Settings.Basic.Interfaces) + if err != nil { + return err + } + var errCount int + for _, eth := range interfaces { + logger.Infoln("使用网卡: ", eth.Name) + if err := LoginSingle(ð, false); err != nil { + config.Logger.Errorf("网卡 %s 登录出错: %v", eth.Name, err) + errCount++ + } + } + if errCount > 0 { + return errors.New("multi interface login not completely succeed") + } + return nil +} + +func LoginSingle(eth *tools.Eth, debugOutput bool) error { + if config.Settings.Backoff.Enable { + return backoff.NewInstance(func(ctx context.Context) error { + return doLogin(eth, debugOutput) + }, config.BackoffConfig).Run(context.TODO()) + } else { + return doLogin(eth, debugOutput) + } +} + +func doLogin(eth *tools.Eth, debugOutput bool) error { logger := config.Logger // 登录配置初始化