From 3f7a27b2defdac53b49a9e39d7e3570e408f8660 Mon Sep 17 00:00:00 2001 From: Settel Date: Sat, 9 Apr 2022 22:25:52 +0200 Subject: [PATCH] feat: create game --- client/src/components/PlayButton.vue | 4 ++-- server/src/application/createGame.go | 35 ++++++++++++++++++++++++---- server/src/application/createUser.go | 4 ++-- server/src/application/savePlayer.go | 3 ++- server/src/game/game.go | 14 +++++++++++ 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/client/src/components/PlayButton.vue b/client/src/components/PlayButton.vue index 0755034..fbb996b 100644 --- a/client/src/components/PlayButton.vue +++ b/client/src/components/PlayButton.vue @@ -8,7 +8,7 @@ logout/switch session -
+ diff --git a/server/src/application/createGame.go b/server/src/application/createGame.go index e0409ff..cb9eb8d 100644 --- a/server/src/application/createGame.go +++ b/server/src/application/createGame.go @@ -3,13 +3,15 @@ package application import ( "encoding/json" "fmt" + "github.com/google/uuid" "math/rand" - // "github.com/google/uuid" "net/http" + "os" + "path" + "sirlab.de/go/knowyt/game" + "sirlab.de/go/knowyt/user" "strconv" "time" - // "path" - "sirlab.de/go/knowyt/game" ) type PlayerInfo struct { @@ -35,7 +37,7 @@ func (app *Application) CreateGame(w http.ResponseWriter, r *http.Request) { return } - _, err = app.createUser(gm, name, authcode) + _, err = app.createUser(gm, name, user.ROLE_GAMEMASTER, authcode) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Printf("%v\n", err) @@ -55,5 +57,28 @@ func (app *Application) CreateGame(w http.ResponseWriter, r *http.Request) { } func (app *Application) createGame(gamename string) (*game.Game, error) { - return nil, fmt.Errorf("createGame() not yet implemented") + gameId := uuid.NewString() + gameDirName := path.Join(app.config.DataDir, "games", gameId) + gameFileName := path.Join(gameDirName, "game.json") + quotesDirName := path.Join(gameDirName, "quotes") + + if err := os.Mkdir(gameDirName, 0777); err != nil { + return nil, err + } + if err := os.Mkdir(quotesDirName, 0777); err != nil { + return nil, err + } + fmt.Printf("createGame(\"%s\": \"%s\")\n", gameId, gamename) + gm, err := game.NewGame(gameId, gameFileName, gamename) + if err != nil { + return nil, err + } + if err := gm.SaveGame(); err != nil { + return nil, err + } + + app.addGame(gm) + go gm.StartEngine() + + return gm, nil } diff --git a/server/src/application/createUser.go b/server/src/application/createUser.go index 0f5438d..c6e82ec 100644 --- a/server/src/application/createUser.go +++ b/server/src/application/createUser.go @@ -8,7 +8,7 @@ import ( "sirlab.de/go/knowyt/user" ) -func (app *Application) createUser(gm *game.Game, name, authcode string) (string, error) { +func (app *Application) createUser(gm *game.Game, name, role, authcode string) (string, error) { if authcode != "" { if _, err := app.GetUserByAuthcode(authcode); err == nil { return "", fmt.Errorf("%s authcode already in use", gm.GetId()) @@ -19,7 +19,7 @@ func (app *Application) createUser(gm *game.Game, name, authcode string) (string userNewUuid := uuid.NewString() fileName := path.Join(dirName, userNewUuid+".json") newUser := user.CreateUser(fileName, gm.GetId()) - newUser.SetRole(user.ROLE_PLAYER) + newUser.SetRole(role) newUser.SetName(name) newUser.SetAuthcode(authcode) if err := newUser.SaveUser(); err != nil { diff --git a/server/src/application/savePlayer.go b/server/src/application/savePlayer.go index e6c99e8..44ae679 100644 --- a/server/src/application/savePlayer.go +++ b/server/src/application/savePlayer.go @@ -41,7 +41,8 @@ func (app *Application) SavePlayer(usr *user.User, w http.ResponseWriter, r *htt return } } else { - if newPlayerId, err := app.createUser(gm, name, authcode); err != nil { + newPlayerId, err := app.createUser(gm, name, user.ROLE_PLAYER, authcode) + if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Printf("%v\n", err) fmt.Fprintf(w, "server error") diff --git a/server/src/game/game.go b/server/src/game/game.go index 6833f63..e2b8724 100644 --- a/server/src/game/game.go +++ b/server/src/game/game.go @@ -32,6 +32,20 @@ func NewGameFromFile(id, fileName string) (*Game, error) { } } +func NewGame(id, fileName, name string) (*Game, error) { + gm := Game{ + id: id, + filename: fileName, + name: name, + eng: engine.NewEngine(), + players: make(map[string]playerInfo, 0), + state: STATE_IDLE, + quotes: make(map[string]*quote.Quote, 0), + } + + return &gm, nil +} + func (gm *Game) SaveGame() error { gm.mu.Lock() defer gm.mu.Unlock()