aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortyropro <[email protected]>2026-04-30 13:15:59 +0100
committertyropro <[email protected]>2026-04-30 13:16:16 +0100
commitb933019e1b5efef72f6c985f3b7bd9eeb36d6512 (patch)
treef5db5a5ff7362b6efe97e8356e23180adf0040d6
parent27a2cefe6d8a50814a0548ec939e780590c3feed (diff)
feature: added auto state loading
-rw-r--r--.env3
-rw-r--r--main.go29
-rw-r--r--state.go5
3 files changed, 33 insertions, 4 deletions
diff --git a/.env b/.env
index fce84ff..691a837 100644
--- a/.env
+++ b/.env
@@ -1,4 +1,5 @@
# - "dev" - loopback addr, debug gin mode
# - "staging" - all interfaces, debug gin mode
# - "release" - all interfaces, release gin mode
-MODE="dev" # "dev" || "release" || "staging"
+MODE=dev # "dev" || "release" || "staging"
+AUTO_LOAD_STATE=true
diff --git a/main.go b/main.go
index 2cfc728..0eafb72 100644
--- a/main.go
+++ b/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "log"
"os"
"github.com/gin-gonic/gin"
@@ -13,7 +14,7 @@ type errResp struct {
}
func main() {
- staging_mode, release_mode := getEnv()
+ staging_mode, release_mode, auto_load_state := getEnv()
// keep debug gin mode when in dev mode or staging
if release_mode {
@@ -21,6 +22,27 @@ func main() {
}
lobby_manager := NewLobbyManager()
+
+ if auto_load_state {
+ log.Println("Attempting to load state from file.")
+ lobby_state, err := load_state_from_file()
+ if err == nil {
+ // we define this anonymous function so that the
+ // defer block gets called after we exit the scope
+ // of this function
+ func() {
+ lobby_manager.mu.Lock()
+ defer lobby_manager.mu.Unlock()
+
+ lobby_manager.Lobbies = lobby_state
+ }()
+
+ log.Println("Loaded state from file.")
+ } else {
+ log.Println("Failed to load state from file. Skipping.")
+ }
+ }
+
ws_manager := NewWsManager()
router := setupRouter(lobby_manager, ws_manager)
@@ -32,11 +54,12 @@ func main() {
}
}
-func getEnv() (bool, bool) {
+func getEnv() (bool, bool, bool) {
staging_mode := os.Getenv("MODE") == "staging"
release_mode := os.Getenv("MODE") == "release"
+ auto_load_state := os.Getenv("AUTO_LOAD_STATE") == "true"
- return staging_mode, release_mode
+ return staging_mode, release_mode, auto_load_state
}
func setupRouter(lobby_manager *LobbyManager, ws_manager *WsManager) *gin.Engine {
diff --git a/state.go b/state.go
index f4ba8e4..81c3e56 100644
--- a/state.go
+++ b/state.go
@@ -10,6 +10,8 @@ import (
"github.com/gin-gonic/gin"
)
+// TODO: Add logging statements to file on Read/Write errors
+
func save_state_endpoint(lobby_manager *LobbyManager) gin.HandlerFunc {
return func(c *gin.Context) {
// TODO: Specify these error response to more accurately pinpoint the error
@@ -74,6 +76,9 @@ func load_state_from_file() (map[string]Lobby, error) {
var temp_lobby_manager LobbyManager
err = json.Unmarshal(file_contents, &temp_lobby_manager)
+ if err != nil {
+ return make(map[string]Lobby), err
+ }
lobby_state := temp_lobby_manager.Lobbies