Fix: exit from room deletes player
This commit is contained in:
		| @@ -14,7 +14,7 @@ | |||||||
|         <option value="ru">Russian</option> |         <option value="ru">Russian</option> | ||||||
| 	</select> | 	</select> | ||||||
| 	</div> | 	</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/> | 	<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> | 	<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> |     </form> | ||||||
|   | |||||||
| @@ -83,27 +83,39 @@ func HandleExit(w http.ResponseWriter, r *http.Request) { | |||||||
| 		abortWithError(w, "cannot leave when game is running") | 		abortWithError(w, "cannot leave when game is running") | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	var creatorLeft bool | 	// if creator leaves, remove all players from room and delete room | ||||||
| 	if fi.Room.CreatorName == fi.State.Username { | 	if fi.Room.CreatorName == fi.State.Username { | ||||||
| 		creatorLeft = true | 		players, err := repo.PlayerListByRoom(r.Context(), fi.Room.ID) | ||||||
| 	} | 		if err != nil { | ||||||
| 	exitedRoom := fi.ExitRoom() | 			log.Error("failed to list players in room", "error", err) | ||||||
| 	if creatorLeft { | 			abortWithError(w, err.Error()) | ||||||
| 		if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil { | 			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) | 			log.Error("failed to remove room", "error", err) | ||||||
| 		} | 		} | ||||||
| 		notify(models.NotifyRoomListUpdate, "") | 		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 { | 	fi.Room = nil | ||||||
| 		log.Error("failed to exit room", "error", err) | 	fi.State.RoomID = nil | ||||||
| 		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.List, err = repo.RoomList(r.Context()) | 	fi.List, err = repo.RoomList(r.Context()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		abortWithError(w, err.Error()) | 		abortWithError(w, err.Error()) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder