@@ -62,8 +62,6 @@ public class RoomService {
6262
6363 private final MessageSender messageSender ;
6464
65- private static final int CONTINUE_DELAY = 3 ;
66-
6765 private static final String PENDING_SESSION_ID = "PENDING_SESSION_ID" ;
6866
6967 public RoomCreateResponse saveRoom (RoomCreateRequest request ) {
@@ -169,19 +167,7 @@ public void exitRoom(Long roomId, String sessionId, UserPrincipal principal) {
169167
170168 Player removePlayer = getRemovePlayer (room , sessionId , principal );
171169
172- /* 방 삭제 */
173- if (isLastPlayer (room , sessionId )) {
174- removeRoom (room );
175- return ;
176- }
177-
178- /* 방장 변경 */
179- if (room .isHost (removePlayer .getId ())) {
180- changeHost (room , sessionId );
181- }
182-
183- /* 플레이어 삭제 */
184- removePlayer (room , sessionId , removePlayer );
170+ cleanRoom (room , sessionId , removePlayer );
185171
186172 SystemNoticeResponse systemNoticeResponse =
187173 ofPlayerEvent (removePlayer .nickname , RoomEventType .EXIT );
@@ -195,6 +181,26 @@ public void exitRoom(Long roomId, String sessionId, UserPrincipal principal) {
195181 }
196182 }
197183
184+ public void backToRoom (Long roomId , String sessionId ) {
185+ Room room = findRoom (roomId );
186+ String destination = getDestination (roomId );
187+
188+ room .initializeRound ();
189+ room .initializePlayers ();
190+
191+ List <Player > disconnectedPlayers = room .getDisconnectedPlayers ();
192+ handleDisconnectedPlayers (room , disconnectedPlayers );
193+
194+ room .updateRoomState (RoomState .WAITING );
195+
196+ messageSender .send (
197+ destination ,
198+ MessageType .GAME_SETTING ,
199+ toGameSettingResponse (room .getGameSetting (), room .getCurrentQuestion ().getQuiz ()));
200+ messageSender .send (destination , MessageType .ROOM_SETTING , toRoomSettingResponse (room ));
201+
202+ }
203+
198204 public void handlePlayerReady (Long roomId , String sessionId ) {
199205 Player player =
200206 roomRepository
@@ -290,19 +296,7 @@ public void exitRoomForDisconnectedPlayer(Long roomId, Player player, String ses
290296 // 연결 끊긴 플레이어 exit 로직 타게 해주기
291297 Room room = findRoom (roomId );
292298
293- /* 방 삭제 */
294- if (isLastPlayer (room , sessionId )) {
295- removeRoom (room );
296- return ;
297- }
298-
299- /* 방장 변경 */
300- if (room .isHost (player .getId ())) {
301- changeHost (room , sessionId );
302- }
303-
304- /* 플레이어 삭제 */
305- removePlayer (room , sessionId , player );
299+ cleanRoom (room , sessionId , player );
306300
307301 String destination = getDestination (roomId );
308302
@@ -314,6 +308,22 @@ public void exitRoomForDisconnectedPlayer(Long roomId, Player player, String ses
314308 }
315309 }
316310
311+ private void cleanRoom (Room room , String sessionId , Player player ) {
312+ /* 방 삭제 */
313+ if (isLastPlayer (room , sessionId )) {
314+ removeRoom (room );
315+ return ;
316+ }
317+
318+ /* 방장 변경 */
319+ if (room .isHost (player .getId ())) {
320+ changeHost (room , sessionId );
321+ }
322+
323+ /* 플레이어 삭제 */
324+ removePlayer (room , sessionId , player );
325+ }
326+
317327 public void handleDisconnectedPlayers (Room room , List <Player > disconnectedPlayers ) {
318328 for (Player player : disconnectedPlayers ) {
319329 String sessionId = room .getSessionIdByUserId (player .getId ());
0 commit comments