diff --git a/components/createroomform.html b/components/createroomform.html index 184dfe5..69f825b 100644 --- a/components/createroomform.html +++ b/components/createroomform.html @@ -14,7 +14,7 @@ -
+

diff --git a/handlers/handlers.go b/handlers/handlers.go index 12a94a0..20b9398 100644 --- a/handlers/handlers.go +++ b/handlers/handlers.go @@ -83,27 +83,39 @@ func HandleExit(w http.ResponseWriter, r *http.Request) { abortWithError(w, "cannot leave when game is running") return } - var creatorLeft bool + // if creator leaves, remove all players from room and delete room if fi.Room.CreatorName == fi.State.Username { - creatorLeft = true - } - exitedRoom := fi.ExitRoom() - if creatorLeft { - if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil { + players, err := repo.PlayerListByRoom(r.Context(), fi.Room.ID) + if err != nil { + log.Error("failed to list players in room", "error", err) + abortWithError(w, err.Error()) + return + } + for _, p := range players { + if p.IsBot { + if err := repo.PlayerDelete(r.Context(), p.Username); err != nil { + log.Error("failed to delete bot", "error", err) + } + continue + } + if err := repo.PlayerExitRoom(r.Context(), p.Username); err != nil { + log.Error("failed to exit room", "error", err) + } + } + if err := repo.RoomDeleteByID(r.Context(), fi.Room.ID); err != nil { log.Error("failed to remove room", "error", err) } notify(models.NotifyRoomListUpdate, "") + } else { + // if regular player leaves, just exit room + if err := repo.PlayerExitRoom(r.Context(), fi.State.Username); err != nil { + log.Error("failed to exit room", "error", err) + abortWithError(w, err.Error()) + return + } } - if err := repo.PlayerExitRoom(r.Context(), fi.State.Username); err != nil { - log.Error("failed to exit room", "error", err) - abortWithError(w, err.Error()) - return - } - if err := repo.RoomUpdate(r.Context(), exitedRoom); err != nil { - log.Error("failed to update room", "error", err) - abortWithError(w, err.Error()) - return - } + fi.Room = nil + fi.State.RoomID = nil fi.List, err = repo.RoomList(r.Context()) if err != nil { abortWithError(w, err.Error())