feat: remove game (WIP)
This commit is contained in:
parent
decb7ad693
commit
e152d33da0
@ -130,6 +130,7 @@ const disableGame = async (): Promise<void> => {
|
|||||||
}
|
}
|
||||||
const removeGame = async (): Promise<void> => {
|
const removeGame = async (): Promise<void> => {
|
||||||
if (confirm('remove game and wipe all of it\'s data?')) {
|
if (confirm('remove game and wipe all of it\'s data?')) {
|
||||||
|
console.log(1)
|
||||||
await useEngine().removeGame()
|
await useEngine().removeGame()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ export async function disableGame(this: EngineContext): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function removeGame(this: EngineContext): Promise<void> {
|
export async function removeGame(this: EngineContext): Promise<void> {
|
||||||
|
console.log(2)
|
||||||
const userInfoStore = useUserinfoStore()
|
const userInfoStore = useUserinfoStore()
|
||||||
await this.callApi('/api/removeGame', {
|
await this.callApi('/api/removeGame', {
|
||||||
g: userInfoStore.gameId,
|
g: userInfoStore.gameId,
|
||||||
|
@ -3,7 +3,10 @@ package application
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
|
"sirlab.de/go/knowyt/game"
|
||||||
"sirlab.de/go/knowyt/log"
|
"sirlab.de/go/knowyt/log"
|
||||||
"sirlab.de/go/knowyt/user"
|
"sirlab.de/go/knowyt/user"
|
||||||
)
|
)
|
||||||
@ -23,15 +26,43 @@ func (app *Application) RemoveGame(usr *user.User, w http.ResponseWriter, r *htt
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("remove game %s\n", gm.GetId())
|
if err := app.removeGame(gm); err != nil {
|
||||||
delete(app.games, gameRef)
|
log.ErrorLog(err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
// if true {
|
fmt.Fprintf(w, "failed to remove game\n")
|
||||||
// err := fmt.Errorf("not yet implmemented (%s)", gm.GetId())
|
return
|
||||||
// log.ErrorLog(err)
|
}
|
||||||
// w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
// fmt.Fprintf(w, "couldn't save game state")
|
|
||||||
// }
|
|
||||||
|
|
||||||
fmt.Fprintf(w, "ok")
|
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
|
||||||
|
}
|
||||||
|
@ -25,5 +25,4 @@ func SaveFile(filename string, data []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,10 @@ func (gm *Game) SaveGame() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gm *Game) RemoveGame() error {
|
||||||
|
return os.Remove(gm.filename)
|
||||||
|
}
|
||||||
|
|
||||||
func (gm *Game) StartEngine() {
|
func (gm *Game) StartEngine() {
|
||||||
gm.eng.Run(gm.populateSyncDataCb)
|
gm.eng.Run(gm.populateSyncDataCb)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user