Feat: roomlist update
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
{{define "roomlist"}}
|
{{define "roomlist"}}
|
||||||
<div id="roomlist">
|
<div id="roomlist" hx-get="/" hx-trigger="sse:roomlistupdate" hx-target="#ancestor">
|
||||||
{{range .}}
|
{{range .}}
|
||||||
<p>
|
<p>
|
||||||
{{.ID}}
|
{{.ID}}
|
||||||
@ -15,9 +15,6 @@
|
|||||||
<span class="px-2 py-1 text-xs font-medium rounded-full {{if .IsGameRunning}}bg-green-100 text-green-800{{else}}bg-gray-100 text-gray-600{{end}}">
|
<span class="px-2 py-1 text-xs font-medium rounded-full {{if .IsGameRunning}}bg-green-100 text-green-800{{else}}bg-gray-100 text-gray-600{{end}}">
|
||||||
{{if .IsRunning}}Game Active{{else}}Waiting Room{{end}}
|
{{if .IsRunning}}Game Active{{else}}Waiting Room{{end}}
|
||||||
</span>
|
</span>
|
||||||
<!-- <span class="text-sm text-gray-600"> -->
|
|
||||||
<!-- {{.PlayersCount}} player{{if ne .PlayersCount 1}}s{{end}} -->
|
|
||||||
<!-- </span> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -46,6 +46,11 @@ func getRoomByID(roomID string) (*models.Room, error) {
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeRoom(roomID string) {
|
||||||
|
key := models.CacheRoomPrefix + roomID
|
||||||
|
memcache.RemoveKey(key)
|
||||||
|
}
|
||||||
|
|
||||||
// context
|
// context
|
||||||
func getRoomIDFromCtx(ctx context.Context) string {
|
func getRoomIDFromCtx(ctx context.Context) string {
|
||||||
id, _ := ctx.Value(models.CtxRoomIDKey).(string)
|
id, _ := ctx.Value(models.CtxRoomIDKey).(string)
|
||||||
|
@ -8,16 +8,6 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
// func HandleRoomList(w http.ResponseWriter, r *http.Request) {
|
|
||||||
// pubRooms := listPublicRooms()
|
|
||||||
// tmpl, err := template.ParseGlob("components/*.html")
|
|
||||||
// if err != nil {
|
|
||||||
// abortWithError(w, err.Error())
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// tmpl.ExecuteTemplate(w, "base", pubRooms)
|
|
||||||
// }
|
|
||||||
|
|
||||||
func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
|
func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
|
||||||
// parse payload
|
// parse payload
|
||||||
payload := &models.RoomReq{
|
payload := &models.RoomReq{
|
||||||
@ -49,6 +39,7 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
|
|||||||
abortWithError(w, msg)
|
abortWithError(w, msg)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
notify(models.NotifyRoomListUpdate, "")
|
||||||
// send msg of created room
|
// send msg of created room
|
||||||
// h.Broker.Notifier <- broker.NotificationEvent{
|
// h.Broker.Notifier <- broker.NotificationEvent{
|
||||||
// EventName: models.MsgRoomListUpdate,
|
// EventName: models.MsgRoomListUpdate,
|
||||||
|
@ -3,6 +3,7 @@ package handlers
|
|||||||
import (
|
import (
|
||||||
"golias/broker"
|
"golias/broker"
|
||||||
"golias/config"
|
"golias/config"
|
||||||
|
"golias/models"
|
||||||
"golias/pkg/cache"
|
"golias/pkg/cache"
|
||||||
"html/template"
|
"html/template"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
@ -93,11 +94,20 @@ func HandleExit(w http.ResponseWriter, r *http.Request) {
|
|||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var creatorLeft bool
|
||||||
|
if fi.Room.CreatorName == fi.State.Username {
|
||||||
|
creatorLeft = true
|
||||||
|
}
|
||||||
exitedRoom := fi.ExitRoom()
|
exitedRoom := fi.ExitRoom()
|
||||||
if err := saveRoom(exitedRoom); err != nil {
|
if err := saveRoom(exitedRoom); err != nil {
|
||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(exitedRoom.PlayerList) == 0 || creatorLeft {
|
||||||
|
removeRoom(exitedRoom.ID)
|
||||||
|
// TODO: notify users if creator left
|
||||||
|
notify(models.NotifyRoomListUpdate, "")
|
||||||
|
}
|
||||||
if err := saveState(fi.State.Username, fi.State); err != nil {
|
if err := saveState(fi.State.Username, fi.State); err != nil {
|
||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
return
|
||||||
|
@ -8,6 +8,7 @@ var (
|
|||||||
CacheRoomPrefix = "room#"
|
CacheRoomPrefix = "room#"
|
||||||
CacheStatePrefix = "state-"
|
CacheStatePrefix = "state-"
|
||||||
// sse
|
// sse
|
||||||
|
NotifyRoomListUpdate = "roomlistupdate"
|
||||||
NotifyRoomUpdatePrefix = "roomupdate_"
|
NotifyRoomUpdatePrefix = "roomupdate_"
|
||||||
NotifyBacklogPrefix = "backlog_"
|
NotifyBacklogPrefix = "backlog_"
|
||||||
)
|
)
|
||||||
|
1
todos.md
1
todos.md
@ -1,6 +1,7 @@
|
|||||||
### feats
|
### feats
|
||||||
- ability to leave room;
|
- ability to leave room;
|
||||||
- close room if creator left (or pass role to other player);
|
- close room if creator left (or pass role to other player);
|
||||||
|
- notify on creation of new room;
|
||||||
|
|
||||||
#### sse points
|
#### sse points
|
||||||
- clue sse update;
|
- clue sse update;
|
||||||
|
Reference in New Issue
Block a user