Enha: sse update on actions
This commit is contained in:
		| @@ -4,6 +4,7 @@ import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"golias/broker" | ||||
| 	"golias/models" | ||||
| 	"golias/utils" | ||||
| 	"strings" | ||||
| @@ -168,6 +169,7 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error) | ||||
| 				return fi, err | ||||
| 			} | ||||
| 			fi.Room.BlueTeam.Mime = fi.State.Username | ||||
| 			fi.Room.BlueTeam.Color = "blue" | ||||
| 			fi.State.Team = "blue" | ||||
| 			fi.State.Role = "mime" | ||||
| 			if fi.Room.RedTeam.Mime == fi.State.Username { | ||||
| @@ -180,6 +182,7 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error) | ||||
| 				return fi, err | ||||
| 			} | ||||
| 			fi.Room.RedTeam.Mime = fi.State.Username | ||||
| 			fi.Room.RedTeam.Color = "red" | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "mime" | ||||
| 			if fi.Room.BlueTeam.Mime == fi.State.Username { | ||||
| @@ -192,10 +195,12 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error) | ||||
| 	} else if role == "guesser" { | ||||
| 		if team == "blue" { | ||||
| 			fi.Room.BlueTeam.Guessers = append(fi.Room.BlueTeam.Guessers, fi.State.Username) | ||||
| 			fi.Room.BlueTeam.Color = "blue" | ||||
| 			fi.State.Team = "blue" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else if team == "red" { | ||||
| 			fi.Room.RedTeam.Guessers = append(fi.Room.RedTeam.Guessers, fi.State.Username) | ||||
| 			fi.Room.RedTeam.Color = "red" | ||||
| 			fi.State.Team = "red" | ||||
| 			fi.State.Role = "guesser" | ||||
| 		} else { | ||||
| @@ -232,3 +237,10 @@ func listPublicRooms() []*models.Room { | ||||
| 	} | ||||
| 	return publicRooms | ||||
| } | ||||
|  | ||||
| func notify(event, msg string) { | ||||
| 	Notifier.Notifier <- broker.NotificationEvent{ | ||||
| 		EventName: event, | ||||
| 		Payload:   msg, | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -35,24 +35,23 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	session, ok := ctx.Value(models.CtxSessionKey).(*models.Session) | ||||
| 	if !ok { | ||||
| 		// trying to get color without a session -> error | ||||
| 		http.Redirect(w, r, "/", 302) | ||||
| 		return | ||||
| 	} | ||||
| 	state, err := loadState(session.Username) | ||||
| 	fi, err := getFullInfoByCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	// TODO: whos move it is? | ||||
| 	if state.Role != "guesser" { | ||||
| 	if fi.State.Role != "guesser" { | ||||
| 		err = errors.New("need to guesser to open the card") | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	log.Debug("got state", "state", state) | ||||
| 	// whos move it is? | ||||
| 	if fi.State.Team != models.UserTeam(fi.Room.TeamTurn) { | ||||
| 		err = errors.New("not your team's move") | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	log.Debug("got state", "state", fi) | ||||
| 	// TODO: update room score | ||||
| 	color, exists := roundWords[word] | ||||
| 	log.Debug("got show-color request", "word", word, "color", color) | ||||
| @@ -65,5 +64,11 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) { | ||||
| 		Color:    models.StrToWordColor(color), | ||||
| 		Revealed: true, | ||||
| 	} | ||||
| 	fi.Room.RevealSpecificWord(word) | ||||
| 	if err := saveFullInfo(fi); err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	notify(models.NotifyRoomUpdatePrefix+fi.Room.ID, "") | ||||
| 	tmpl.ExecuteTemplate(w, "cardword", cardword) | ||||
| } | ||||
|   | ||||
| @@ -149,6 +149,7 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	notify(models.NotifyRoomUpdatePrefix+fi.Room.ID, "") | ||||
| 	tmpl.ExecuteTemplate(w, "base", fi) | ||||
| } | ||||
|  | ||||
| @@ -176,6 +177,7 @@ func HandleEndTurn(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	notify(models.NotifyRoomUpdatePrefix+fi.Room.ID, "") | ||||
| 	tmpl.ExecuteTemplate(w, "base", fi) | ||||
| } | ||||
|  | ||||
| @@ -204,6 +206,8 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	// to update only the room that should be updated | ||||
| 	notify(models.NotifyRoomUpdatePrefix+fi.Room.ID, "") | ||||
| 	tmpl.ExecuteTemplate(w, "room", fi) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| package handlers | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"golias/broker" | ||||
| 	"golias/config" | ||||
| 	"golias/pkg/cache" | ||||
| @@ -9,7 +8,6 @@ import ( | ||||
| 	"log/slog" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| @@ -28,18 +26,6 @@ func init() { | ||||
| 	cfg = config.LoadConfigOrDefault("") | ||||
| 	Notifier = broker.NewBroker() | ||||
| 	go Notifier.Listen() | ||||
| 	ticker := time.NewTicker(2 * time.Second) | ||||
| 	go func() { | ||||
| 		counter := 0 | ||||
| 		for { | ||||
| 			<-ticker.C | ||||
| 			Notifier.Notifier <- broker.NotificationEvent{ | ||||
| 				EventName: "test", | ||||
| 				Payload:   fmt.Sprintf("%v test call of notifier", counter), | ||||
| 			} | ||||
| 			counter++ | ||||
| 		} | ||||
| 	}() | ||||
| } | ||||
|  | ||||
| var roundWords = map[string]string{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder