improve: login entry logic

This commit is contained in:
Mmx
2024-09-25 20:47:30 +08:00
parent a8b3d168cf
commit 0cb58ec841
3 changed files with 59 additions and 52 deletions

View File

@@ -3,34 +3,19 @@ package main
import ( import (
"github.com/Mmx233/BitSrunLoginGo/internal/config" "github.com/Mmx233/BitSrunLoginGo/internal/config"
"github.com/Mmx233/BitSrunLoginGo/internal/controllers" "github.com/Mmx233/BitSrunLoginGo/internal/controllers"
"github.com/Mmx233/BitSrunLoginGo/tools"
) )
func main() { func main() {
logger := config.Logger
if config.Settings.Basic.Interfaces != "" {
logger.Infoln("[多网卡模式]")
}
if config.Settings.Guardian.Enable { if config.Settings.Guardian.Enable {
//进入守护模式 //进入守护模式
controllers.Guardian() controllers.Guardian()
} else { } else {
//登录流程 //执行单次流程
var err error _ = controllers.Login()
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(&eth, false); err != nil {
config.Logger.Errorf("网卡 %s 登录出错: %v", eth.Name, err)
}
}
}
} }
} }

View File

@@ -2,7 +2,6 @@ package controllers
import ( import (
"github.com/Mmx233/BitSrunLoginGo/internal/config" "github.com/Mmx233/BitSrunLoginGo/internal/config"
"github.com/Mmx233/BitSrunLoginGo/tools"
"time" "time"
) )
@@ -10,28 +9,12 @@ import (
func Guardian() { func Guardian() {
logger := config.Logger logger := config.Logger
logger.Infoln("[守护模式启动]") logger.Infoln("[守护模式]")
GuardianDuration := time.Duration(config.Settings.Guardian.Duration) * time.Second GuardianDuration := time.Duration(config.Settings.Guardian.Duration) * time.Second
for { for {
if config.Settings.Basic.Interfaces == "" { //单网卡 _ = Login()
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(&eth, true)
if err != nil {
logger.Errorln("网口 ", eth.Name+" 登录出错: ", err)
}
}
}
}
time.Sleep(GuardianDuration) time.Sleep(GuardianDuration)
} }
} }

View File

@@ -11,20 +11,29 @@ import (
"github.com/Mmx233/BitSrunLoginGo/pkg/srun" "github.com/Mmx233/BitSrunLoginGo/pkg/srun"
"github.com/Mmx233/BitSrunLoginGo/tools" "github.com/Mmx233/BitSrunLoginGo/tools"
"net/http" "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 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()
}
}
func ddns(ip string, httpClient *http.Client) error { func ddns(ip string, httpClient *http.Client) error {
return dns.Run(&dns.Config{ return dns.Run(&dns.Config{
@@ -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(&eth, 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 logger := config.Logger
// 登录配置初始化 // 登录配置初始化