feat: add automation features (auto-update, auto-start, scheduled updates)
This commit is contained in:
@@ -50,6 +50,7 @@ func main() {
|
||||
modlistMgr := services.NewModlistManager(dataDir)
|
||||
process := services.NewProcessManager(serverfileDir, modsDir, cfgDir, profilesDir, settings, modlistMgr, configMgr, streamer)
|
||||
steamcmd := services.NewSteamCmdManager(serverfileDir, streamer)
|
||||
scheduler := services.NewScheduler(settings, modlistMgr, steamcmd)
|
||||
|
||||
r := gin.Default()
|
||||
|
||||
@@ -62,9 +63,58 @@ func main() {
|
||||
log.Printf("serving frontend from %s", frontendDir)
|
||||
}
|
||||
|
||||
handler := api.New(settings, configMgr, modlistMgr, process, steamcmd, streamer, serverfileDir, modsDir, cfgDir, profilesDir)
|
||||
handler := api.New(settings, configMgr, modlistMgr, process, steamcmd, scheduler, streamer, serverfileDir, modsDir, cfgDir, profilesDir)
|
||||
handler.SetupRoutes(r)
|
||||
|
||||
// Startup auto-tasks
|
||||
s, err := settings.Load()
|
||||
if err != nil {
|
||||
log.Printf("startup: load settings: %v", err)
|
||||
} else {
|
||||
if s.AutoUpdateOnStartup && s.SteamUser != "" {
|
||||
go func() {
|
||||
log.Print("startup: auto-updating gameserver")
|
||||
if err := steamcmd.UpdateGame(s.SteamBranch, s.SteamUser); err != nil {
|
||||
log.Printf("startup: auto-update game failed: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if s.AutoUpdateModsOnStartup && s.ActiveModlist != "" {
|
||||
go func() {
|
||||
log.Print("startup: auto-updating mods")
|
||||
ml, err := modlistMgr.Get(s.ActiveModlist)
|
||||
if err != nil {
|
||||
log.Printf("startup: load modlist for auto-update: %v", err)
|
||||
return
|
||||
}
|
||||
var modIDs []string
|
||||
for _, m := range ml.Mods {
|
||||
if m.Enabled {
|
||||
modIDs = append(modIDs, m.ID)
|
||||
}
|
||||
}
|
||||
if len(modIDs) > 0 {
|
||||
if err := steamcmd.DownloadMods(modIDs); err != nil {
|
||||
log.Printf("startup: auto-update mods failed: %v", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if s.AutoStartOnStartup && s.WasRunning {
|
||||
go func() {
|
||||
log.Print("startup: auto-restarting server (was running before)")
|
||||
if err := process.Start(); err != nil {
|
||||
log.Printf("startup: auto-start failed: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
// Start the scheduled updater
|
||||
scheduler.Start()
|
||||
|
||||
log.Printf("starting server on %s", listen)
|
||||
|
||||
srv := &http.Server{Addr: listen, Handler: r}
|
||||
@@ -80,6 +130,7 @@ func main() {
|
||||
<-quit
|
||||
|
||||
log.Print("shutting down server...")
|
||||
scheduler.Stop()
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
Reference in New Issue
Block a user