diff --git a/components/room.html b/components/room.html
index 93ef6df..696e429 100644
--- a/components/room.html
+++ b/components/room.html
@@ -1,6 +1,7 @@
{{define "room"}}
Hello {{.State.Username}};
+
Turn of the {{.Room.TeamTurn}} team
{{if eq .State.Team ""}}
join the team!
@@ -26,4 +27,7 @@
{{template "cardtable" .Room}}
+
+
+
{{end}}
diff --git a/handlers/actions.go b/handlers/actions.go
index 9816a9a..4f51860 100644
--- a/handlers/actions.go
+++ b/handlers/actions.go
@@ -70,9 +70,9 @@ func saveStateByCtx(ctx context.Context, state *models.UserState) error {
return saveState(username, state)
}
-func saveFullInfoByUsername(username string, fi *models.FullInfo) error {
+func saveFullInfo(fi *models.FullInfo) error {
// INFO: unfortunately working no transactions; so case are possible where first object is updated but the second is not
- if err := saveState(username, fi.State); err != nil {
+ if err := saveState(fi.State.Username, fi.State); err != nil {
return err
}
if err := saveRoom(fi.Room); err != nil {
@@ -194,7 +194,7 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error)
err := errors.New("uknown role:" + role)
return nil, err
}
- if err := saveFullInfoByUsername(fi.State.Username, fi); err != nil {
+ if err := saveFullInfo(fi); err != nil {
return nil, err
}
return fi, nil
diff --git a/handlers/auth.go b/handlers/auth.go
index 5800db1..f12864c 100644
--- a/handlers/auth.go
+++ b/handlers/auth.go
@@ -76,7 +76,7 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
state.State.Username = cleanName
// save state to cache
// if err := saveState(cleanName, state.State); err != nil {
- if err := saveFullInfoByUsername(cleanName, state); err != nil {
+ if err := saveFullInfo(state); err != nil {
log.Error("failed to save state", "error", err)
abortWithError(w, err.Error())
return
@@ -144,8 +144,8 @@ func cacheSetSession(key string, session *models.Session) error {
return err
}
memcache.Set(key, sesb)
- // expire in 10 min
- memcache.Expire(key, 10*60)
+ // TODO: to config
+ memcache.Expire(key, 60*60)
return nil
}
diff --git a/handlers/game.go b/handlers/game.go
index 0684823..9f5f8c0 100644
--- a/handlers/game.go
+++ b/handlers/game.go
@@ -2,6 +2,7 @@ package handlers
import (
"context"
+ "errors"
"golias/models"
"html/template"
"net/http"
@@ -125,3 +126,30 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
}
tmpl.ExecuteTemplate(w, "base", fi)
}
+
+func HandleEndTurn(w http.ResponseWriter, r *http.Request) {
+ // get username
+ fi, err := getFullInfoByCtx(r.Context())
+ if err != nil {
+ abortWithError(w, err.Error())
+ return
+ }
+ // check if one who pressed it is from the team who has the turn
+ if fi.Room.TeamTurn != string(fi.State.Team) {
+ err = errors.New("unexpected team turn:" + fi.Room.TeamTurn)
+ abortWithError(w, err.Error())
+ return
+ }
+ fi.Room.ChangeTurn()
+ if err := saveFullInfo(fi); err != nil {
+ abortWithError(w, err.Error())
+ return
+ }
+ // return html
+ tmpl, err := template.ParseGlob("components/*.html")
+ if err != nil {
+ abortWithError(w, err.Error())
+ return
+ }
+ tmpl.ExecuteTemplate(w, "base", fi)
+}
diff --git a/main.go b/main.go
index bc0cd51..431f52c 100644
--- a/main.go
+++ b/main.go
@@ -24,6 +24,7 @@ func ListenToRequests(port string) error {
mux.HandleFunc("POST /login", handlers.HandleFrontLogin)
mux.HandleFunc("GET /room", handlers.HandleRoomEnter)
mux.HandleFunc("POST /join-team", handlers.HandleJoinTeam)
+ mux.HandleFunc("GET /end-turn", handlers.HandleEndTurn)
//elements
mux.HandleFunc("GET /room/createform", handlers.HandleShowCreateForm)
mux.HandleFunc("GET /room/hideform", handlers.HandleHideCreateForm)
diff --git a/models/main.go b/models/main.go
index bfb118c..8185330 100644
--- a/models/main.go
+++ b/models/main.go
@@ -59,6 +59,17 @@ type Room struct {
RedTurn bool // false is blue turn
}
+func (r *Room) ChangeTurn() {
+ switch r.TeamTurn {
+ case "blue":
+ r.TeamTurn = "red"
+ case "red":
+ r.TeamTurn = "blue"
+ default:
+ r.TeamTurn = "blue"
+ }
+}
+
type WordCard struct {
Word string
Color WordColor
diff --git a/models/state.go b/models/state.go
index 8b63450..f455675 100644
--- a/models/state.go
+++ b/models/state.go
@@ -84,6 +84,7 @@ func MakeTestState() *FullInfo {
Cards: cards,
RedTeam: redTeam,
BlueTeam: blueTeam,
+ TeamTurn: "blue",
}
us := &UserState{
Username: "test-name",