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 {
|
||||||
|
log.Error("failed to list players in room", "error", err)
|
||||||
|
abortWithError(w, err.Error())
|
||||||
|
return
|
||||||
}
|
}
|
||||||
exitedRoom := fi.ExitRoom()
|
for _, p := range players {
|
||||||
if creatorLeft {
|
if p.IsBot {
|
||||||
if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil {
|
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 {
|
if err := repo.PlayerExitRoom(r.Context(), fi.State.Username); err != nil {
|
||||||
log.Error("failed to exit room", "error", err)
|
log.Error("failed to exit room", "error", err)
|
||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
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())
|
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