Initial commit
This commit is contained in:
66
backend/internal/services/settings.go
Normal file
66
backend/internal/services/settings.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"arma3-web-server/internal/models"
|
||||
)
|
||||
|
||||
type SettingsManager struct {
|
||||
path string
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func NewSettingsManager(dataDir string) *SettingsManager {
|
||||
return &SettingsManager{
|
||||
path: filepath.Join(dataDir, "settings.json"),
|
||||
}
|
||||
}
|
||||
|
||||
func (sm *SettingsManager) Load() (*models.ServerSettings, error) {
|
||||
sm.mu.Lock()
|
||||
defer sm.mu.Unlock()
|
||||
|
||||
data, err := os.ReadFile(sm.path)
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return sm.defaults(), nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var s models.ServerSettings
|
||||
if err := json.Unmarshal(data, &s); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &s, nil
|
||||
}
|
||||
|
||||
func (sm *SettingsManager) Save(s *models.ServerSettings) error {
|
||||
sm.mu.Lock()
|
||||
defer sm.mu.Unlock()
|
||||
|
||||
s.UpdatedAt = time.Now().UTC()
|
||||
data, err := json.MarshalIndent(s, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(sm.path, data, 0644)
|
||||
}
|
||||
|
||||
func (sm *SettingsManager) defaults() *models.ServerSettings {
|
||||
return &models.ServerSettings{
|
||||
IPPort: "0.0.0.0:2302",
|
||||
ServerParameters: "-server -world=empty -loadMissionToMemory -noPause",
|
||||
SteamBranch: "stable",
|
||||
SteamUser: "anonymous",
|
||||
Platform: "linux",
|
||||
ActiveConfig: "",
|
||||
ActiveModlist: "",
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user