Files

84 lines
2.1 KiB
Go

package backend
import (
"ant-chrome/backend/internal/automation"
"ant-chrome/backend/internal/browser"
"ant-chrome/backend/internal/config"
"ant-chrome/backend/internal/database"
"ant-chrome/backend/internal/launchcode"
"ant-chrome/backend/internal/logger"
"ant-chrome/backend/internal/proxy"
"context"
"strings"
"sync"
)
type quitMode uint8
const (
quitModeFull quitMode = iota
quitModeAppOnly
)
// App 应用结构体
type App struct {
ctx context.Context
config *config.Config
db *database.DB
interceptor *logger.MethodInterceptor
browserMgr *browser.Manager
xrayMgr *proxy.XrayManager
clashMgr *proxy.ClashManager
singboxMgr *proxy.SingBoxManager
launchCodeSvc *launchcode.LaunchCodeService
launchServer *launchcode.LaunchServer
automationMgr *automation.Manager
speedScheduler *browser.ProxySpeedScheduler
appRoot string
version string
forceQuit bool
quitMode quitMode
maintenanceMu sync.Mutex
bridgeMu sync.Mutex
profileBridgeRefs map[string]profileProxyBridgeRef
deferredStartTargetsMu sync.Mutex
deferredStartTargets map[string][]string
automationTargetMu sync.Mutex
automationTargetCursor map[string]string
stopServicesOnce sync.Once
finalizeOnce sync.Once
}
// NewApp 创建新的应用实例
func NewApp(appRoot string, appVersion ...string) *App {
version := ""
if len(appVersion) > 0 {
version = strings.TrimSpace(appVersion[0])
}
return &App{
appRoot: strings.TrimSpace(appRoot),
version: version,
profileBridgeRefs: make(map[string]profileProxyBridgeRef),
deferredStartTargets: make(map[string][]string),
automationTargetCursor: make(map[string]string),
}
}
func (a *App) appName() string {
if a.config != nil {
if name := strings.TrimSpace(a.config.App.Name); name != "" {
return name
}
}
return "Ant Browser"
}
func (a *App) appVersion() string {
version := strings.TrimSpace(a.version)
if version == "" {
return "unknown"
}
return version
}