Fix: exit from room deletes player
This commit is contained in:
@ -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())
|
||||
|
Reference in New Issue
Block a user