diff --git a/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java b/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java index 8a98e663..52f02c54 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java +++ b/backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java @@ -17,6 +17,7 @@ import io.f1.backend.domain.game.dto.RoomEventType; import io.f1.backend.domain.game.dto.request.RoomCreateRequest; import io.f1.backend.domain.game.dto.request.RoomValidationRequest; +import io.f1.backend.domain.game.dto.response.ExitSuccessResponse; import io.f1.backend.domain.game.dto.response.GameSettingResponse; import io.f1.backend.domain.game.dto.response.PlayerListResponse; import io.f1.backend.domain.game.dto.response.RoomCreateResponse; @@ -168,9 +169,13 @@ public void exitRoom(Long roomId, String sessionId, UserPrincipal principal) { Player removePlayer = getRemovePlayer(room, sessionId, principal); + String destination = getDestination(roomId); + /* 방 삭제 */ if (isLastPlayer(room, sessionId)) { removeRoom(room); + messageSender.send( + destination, MessageType.EXIT_SUCCESS, new ExitSuccessResponse(true)); return; } @@ -180,17 +185,17 @@ public void exitRoom(Long roomId, String sessionId, UserPrincipal principal) { } /* 플레이어 삭제 */ - removePlayer(room, sessionId, removePlayer); + boolean isRemoved = removePlayer(room, sessionId, removePlayer); SystemNoticeResponse systemNoticeResponse = ofPlayerEvent(removePlayer.nickname, RoomEventType.EXIT); PlayerListResponse playerListResponse = toPlayerListResponse(room); - String destination = getDestination(roomId); - messageSender.send(destination, MessageType.PLAYER_LIST, playerListResponse); messageSender.send(destination, MessageType.SYSTEM_NOTICE, systemNoticeResponse); + messageSender.send( + destination, MessageType.EXIT_SUCCESS, new ExitSuccessResponse(isRemoved)); } } @@ -307,9 +312,8 @@ private void changeHost(Room room, String hostSessionId) { log.info("user_id:{} 방장 변경 완료 ", nextHost.getId()); } - private void removePlayer(Room room, String sessionId, Player removePlayer) { - room.removeUserId(removePlayer.getId()); - room.removeSessionId(sessionId); + private boolean removePlayer(Room room, String sessionId, Player removePlayer) { + return room.removeUserId(removePlayer.getId()) && room.removeSessionId(sessionId); } private String getDestination(Long roomId) { diff --git a/backend/src/main/java/io/f1/backend/domain/game/dto/MessageType.java b/backend/src/main/java/io/f1/backend/domain/game/dto/MessageType.java index 7e5384eb..947a2c88 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/dto/MessageType.java +++ b/backend/src/main/java/io/f1/backend/domain/game/dto/MessageType.java @@ -9,4 +9,5 @@ public enum MessageType { CHAT, QUESTION_RESULT, RANK_UPDATE, + EXIT_SUCCESS, } diff --git a/backend/src/main/java/io/f1/backend/domain/game/dto/response/ExitSuccessResponse.java b/backend/src/main/java/io/f1/backend/domain/game/dto/response/ExitSuccessResponse.java new file mode 100644 index 00000000..7130c007 --- /dev/null +++ b/backend/src/main/java/io/f1/backend/domain/game/dto/response/ExitSuccessResponse.java @@ -0,0 +1,3 @@ +package io.f1.backend.domain.game.dto.response; + +public record ExitSuccessResponse(boolean isSuccess) {} diff --git a/backend/src/main/java/io/f1/backend/domain/game/model/Room.java b/backend/src/main/java/io/f1/backend/domain/game/model/Room.java index 82b4b18e..ec1fe78b 100644 --- a/backend/src/main/java/io/f1/backend/domain/game/model/Room.java +++ b/backend/src/main/java/io/f1/backend/domain/game/model/Room.java @@ -56,12 +56,12 @@ public void updateRoomState(RoomState newState) { this.state = newState; } - public void removeUserId(Long id) { - this.userIdSessionMap.remove(id); + public boolean removeUserId(Long id) { + return this.userIdSessionMap.remove(id) != null; } - public void removeSessionId(String sessionId) { - this.playerSessionMap.remove(sessionId); + public boolean removeSessionId(String sessionId) { + return this.playerSessionMap.remove(sessionId) != null; } public void increasePlayerCorrectCount(String sessionId) {