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
	 Grail Finder
					Grail Finder