diff --git a/client/src/components/admin/GameInfoTile.vue b/client/src/components/admin/GameInfoTile.vue index 34690ed..8250599 100644 --- a/client/src/components/admin/GameInfoTile.vue +++ b/client/src/components/admin/GameInfoTile.vue @@ -130,6 +130,7 @@ const disableGame = async (): Promise => { } const removeGame = async (): Promise => { if (confirm('remove game and wipe all of it\'s data?')) { + console.log(1) await useEngine().removeGame() } } diff --git a/client/src/composables/engine/gameState.ts b/client/src/composables/engine/gameState.ts index f3f0c85..fc88fa3 100644 --- a/client/src/composables/engine/gameState.ts +++ b/client/src/composables/engine/gameState.ts @@ -44,6 +44,7 @@ export async function disableGame(this: EngineContext): Promise { } export async function removeGame(this: EngineContext): Promise { + console.log(2) const userInfoStore = useUserinfoStore() await this.callApi('/api/removeGame', { g: userInfoStore.gameId, diff --git a/server/src/application/removeGame.go b/server/src/application/removeGame.go index ef3b5e1..98a4bec 100644 --- a/server/src/application/removeGame.go +++ b/server/src/application/removeGame.go @@ -3,7 +3,10 @@ package application import ( "fmt" "net/http" + "os" + "path" + "sirlab.de/go/knowyt/game" "sirlab.de/go/knowyt/log" "sirlab.de/go/knowyt/user" ) @@ -23,15 +26,43 @@ func (app *Application) RemoveGame(usr *user.User, w http.ResponseWriter, r *htt return } - log.Info("remove game %s\n", gm.GetId()) - delete(app.games, gameRef) - - // if true { - // err := fmt.Errorf("not yet implmemented (%s)", gm.GetId()) - // log.ErrorLog(err) - // w.WriteHeader(http.StatusInternalServerError) - // fmt.Fprintf(w, "couldn't save game state") - // } + if err := app.removeGame(gm); err != nil { + log.ErrorLog(err) + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, "failed to remove game\n") + return + } fmt.Fprintf(w, "ok") } + +func (app *Application) removeGame(gm *game.Game) error { + log.Info("remove game %s\n", gm.GetId()) + + gameInfo := gm.GetGameInfo() + for _, player := range gameInfo.Players { + log.Info("remove player %s (%s)\n", player.Id, player.Name) + + if err := app.removePlayerById(player.Id, gm); err != nil { + return err + } + } + + gameBaseDir := path.Join(app.config.DataDir, "games", gm.GetId()) + stateFilename := path.Join(gameBaseDir, "state.json") + if err := os.Remove(stateFilename); err != nil { + return err + } + + if err := gm.RemoveGame(); err != nil { + return err + } + + app.mu.Lock() + delete(app.games, gm.GetId()) + app.mu.Unlock() + + log.Info("game %s done\n", gm.GetId()) + + return nil +} diff --git a/server/src/fileutil/SaveFile.go b/server/src/fileutil/SaveFile.go index ca69ef9..5862518 100644 --- a/server/src/fileutil/SaveFile.go +++ b/server/src/fileutil/SaveFile.go @@ -25,5 +25,4 @@ func SaveFile(filename string, data []byte) error { } return nil - } diff --git a/server/src/game/game.go b/server/src/game/game.go index 11a6d1c..11ae148 100644 --- a/server/src/game/game.go +++ b/server/src/game/game.go @@ -76,6 +76,10 @@ func (gm *Game) SaveGame() error { return nil } +func (gm *Game) RemoveGame() error { + return os.Remove(gm.filename) +} + func (gm *Game) StartEngine() { gm.eng.Run(gm.populateSyncDataCb) }