Fix: exit from room deletes player
This commit is contained in:
		| @@ -14,7 +14,7 @@ | ||||
|         <option value="ru">Russian</option> | ||||
| 	</select> | ||||
| 	</div> | ||||
| 	<label For="password">Password:</label><br/> | ||||
| 	<label For="room_pass">Password:</label><br/> | ||||
| 	<input type="text" id="password" name="room_pass" class="text-center text-white" value="" placeholder="Leave empty for open room"/><br/> | ||||
| 	<button button class="justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" type="submit" >Create Room</button> | ||||
|     </form> | ||||
|   | ||||
| @@ -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 | ||||
| 		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 | ||||
| 		} | ||||
| 	exitedRoom := fi.ExitRoom() | ||||
| 	if creatorLeft { | ||||
| 		if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil { | ||||
| 		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.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