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
|
||||
}
|
||||
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