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())