diff --git a/client/src/components/CreateGame.vue b/client/src/components/CreateGame.vue
index ff2b657..b768aed 100644
--- a/client/src/components/CreateGame.vue
+++ b/client/src/components/CreateGame.vue
@@ -22,7 +22,13 @@
-
+
@@ -44,9 +50,10 @@ export default {
closeModal() {
this.showModal = false
},
- createGame() {
+ async createGame() {
this.showModal = false
- this.$router.push('/gamemaster')
+ const user = await this.$engine.createGame(this.name, this.teamname)
+ console.log(user)
},
},
}
diff --git a/client/src/plugins/engine/createGame.js b/client/src/plugins/engine/createGame.js
new file mode 100644
index 0000000..96ee74a
--- /dev/null
+++ b/client/src/plugins/engine/createGame.js
@@ -0,0 +1,6 @@
+export default async function(name, teamname) {
+ return await this.callApi('/api/createGame', {
+ name,
+ teamname,
+ })
+}
diff --git a/client/src/plugins/engine/index.js b/client/src/plugins/engine/index.js
index a052349..3c56897 100644
--- a/client/src/plugins/engine/index.js
+++ b/client/src/plugins/engine/index.js
@@ -19,6 +19,7 @@ import getMyQuotes from './getMyQuotes'
import saveQuote from './saveQuote'
import createQuote from './createQuote'
import removeQuote from './removeQuote'
+import createGame from './createGame'
export default (context, inject) => {
const engine = {
@@ -48,6 +49,7 @@ export default (context, inject) => {
finishGame,
parseSyncData,
saveSelection,
+ createGame,
}
inject('engine', engine)
diff --git a/server/src/application/createGame.go b/server/src/application/createGame.go
new file mode 100644
index 0000000..e0409ff
--- /dev/null
+++ b/server/src/application/createGame.go
@@ -0,0 +1,59 @@
+package application
+
+import (
+ "encoding/json"
+ "fmt"
+ "math/rand"
+ // "github.com/google/uuid"
+ "net/http"
+ "strconv"
+ "time"
+ // "path"
+ "sirlab.de/go/knowyt/game"
+)
+
+type PlayerInfo struct {
+ Status string `json:"status"`
+ Authcode string `json:"authcode"`
+}
+
+func (app *Application) CreateGame(w http.ResponseWriter, r *http.Request) {
+ name := r.URL.Query().Get("name")
+ teamname := r.URL.Query().Get("teamname")
+
+ authcode := ""
+ rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
+ for i := 0; i < 6; i++ {
+ authcode += strconv.Itoa(rnd.Intn(1000) / 10 % 10)
+ }
+
+ gm, err := app.createGame(teamname)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ fmt.Printf("%v\n", err)
+ fmt.Fprintf(w, "server error")
+ return
+ }
+
+ _, err = app.createUser(gm, name, authcode)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ fmt.Printf("%v\n", err)
+ fmt.Fprintf(w, "server error")
+ return
+ }
+
+ playerInfo := PlayerInfo{
+ Status: "ok",
+ Authcode: authcode,
+ }
+ fmt.Printf("Name %s, Teamname %s, Authcode %s\n", name, teamname, authcode)
+
+ w.Header().Add("Content-Type", "application/json")
+ jsonString, _ := json.Marshal(playerInfo)
+ fmt.Fprintf(w, string(jsonString))
+}
+
+func (app *Application) createGame(gamename string) (*game.Game, error) {
+ return nil, fmt.Errorf("createGame() not yet implemented")
+}
diff --git a/server/src/application/createUser.go b/server/src/application/createUser.go
new file mode 100644
index 0000000..0f5438d
--- /dev/null
+++ b/server/src/application/createUser.go
@@ -0,0 +1,31 @@
+package application
+
+import (
+ "fmt"
+ "github.com/google/uuid"
+ "path"
+ "sirlab.de/go/knowyt/game"
+ "sirlab.de/go/knowyt/user"
+)
+
+func (app *Application) createUser(gm *game.Game, name, authcode string) (string, error) {
+ if authcode != "" {
+ if _, err := app.GetUserByAuthcode(authcode); err == nil {
+ return "", fmt.Errorf("%s authcode already in use", gm.GetId())
+ }
+ }
+
+ dirName := path.Join(app.config.DataDir, "users")
+ userNewUuid := uuid.NewString()
+ fileName := path.Join(dirName, userNewUuid+".json")
+ newUser := user.CreateUser(fileName, gm.GetId())
+ newUser.SetRole(user.ROLE_PLAYER)
+ newUser.SetName(name)
+ newUser.SetAuthcode(authcode)
+ if err := newUser.SaveUser(); err != nil {
+ return "", err
+ }
+ app.users[newUser.GetId()] = newUser
+ gm.AddPlayer(newUser)
+ return newUser.GetId(), nil
+}
diff --git a/server/src/application/modifyUser.go b/server/src/application/modifyUser.go
new file mode 100644
index 0000000..2af445d
--- /dev/null
+++ b/server/src/application/modifyUser.go
@@ -0,0 +1,26 @@
+package application
+
+import (
+ "fmt"
+ "sirlab.de/go/knowyt/game"
+)
+
+func (app *Application) modifyUser(id string, gm *game.Game, name, authcode string) error {
+ if authcode != "" {
+ if usr, err := app.GetUserByAuthcode(authcode); err == nil && usr.GetId() != id {
+ return fmt.Errorf("%s authcode already in use", gm.GetId())
+ }
+ }
+
+ modifyUser := app.users[id]
+ if modifyUser.GetId() != id || modifyUser.GetGameId() != gm.GetId() {
+ return fmt.Errorf("%s couldn't find player %s in game", gm.GetId(), id)
+ }
+ modifyUser.SetName(name)
+ modifyUser.SetAuthcode(authcode)
+ if err := modifyUser.SaveUser(); err != nil {
+ return err
+ }
+ gm.UpdatePlayer(modifyUser)
+ return nil
+}
diff --git a/server/src/application/savePlayer.go b/server/src/application/savePlayer.go
index 635b8f6..e6c99e8 100644
--- a/server/src/application/savePlayer.go
+++ b/server/src/application/savePlayer.go
@@ -2,10 +2,7 @@ package application
import (
"fmt"
- "github.com/google/uuid"
-
"net/http"
- "path"
"sirlab.de/go/knowyt/game"
"sirlab.de/go/knowyt/user"
"strconv"
@@ -78,45 +75,3 @@ func (app *Application) updateScore(gm *game.Game, id string, scoreString string
}
return nil
}
-
-func (app *Application) modifyUser(id string, gm *game.Game, name, authcode string) error {
- if authcode != "" {
- if usr, err := app.GetUserByAuthcode(authcode); err == nil && usr.GetId() != id {
- return fmt.Errorf("%s authcode already in use", gm.GetId())
- }
- }
-
- modifyUser := app.users[id]
- if modifyUser.GetId() != id || modifyUser.GetGameId() != gm.GetId() {
- return fmt.Errorf("%s couldn't find player %s in game", gm.GetId(), id)
- }
- modifyUser.SetName(name)
- modifyUser.SetAuthcode(authcode)
- if err := modifyUser.SaveUser(); err != nil {
- return err
- }
- gm.UpdatePlayer(modifyUser)
- return nil
-}
-
-func (app *Application) createUser(gm *game.Game, name, authcode string) (string, error) {
- if authcode != "" {
- if _, err := app.GetUserByAuthcode(authcode); err == nil {
- return "", fmt.Errorf("%s authcode already in use", gm.GetId())
- }
- }
-
- dirName := path.Join(app.config.DataDir, "users")
- userNewUuid := uuid.NewString()
- fileName := path.Join(dirName, userNewUuid+".json")
- newUser := user.CreateUser(fileName, gm.GetId())
- newUser.SetRole(user.ROLE_PLAYER)
- newUser.SetName(name)
- newUser.SetAuthcode(authcode)
- if err := newUser.SaveUser(); err != nil {
- return "", err
- }
- app.users[newUser.GetId()] = newUser
- gm.AddPlayer(newUser)
- return newUser.GetId(), nil
-}
diff --git a/server/src/knowyt.go b/server/src/knowyt.go
index 5c2f064..9d6a4e5 100644
--- a/server/src/knowyt.go
+++ b/server/src/knowyt.go
@@ -20,6 +20,7 @@ func main() {
mux.PublicHandleFunc("/__intern__/exit", handler.Exit)
mux.PublicHandleFunc("/api/login", mux.Login)
mux.PublicHandleFunc("/api/logout", mux.Logout)
+ mux.PublicHandleFunc("/api/createGame", app.CreateGame)
mux.PrivateHandleFunc("/api/cameo", mux.Cameo)
mux.PrivateHandleFunc("/api/userinfo", mux.GetUserInfo)
mux.PrivateHandleFunc("/api/gameinfo", app.GetGameInfo)