|
10 | 10 |
|
11 | 11 | import io.f1.backend.domain.game.dto.MessageType; |
12 | 12 | import io.f1.backend.domain.game.event.RoomUpdatedEvent; |
| 13 | +import io.f1.backend.domain.game.model.ConnectionState; |
13 | 14 | import io.f1.backend.domain.game.model.Player; |
14 | 15 | import io.f1.backend.domain.game.model.Room; |
15 | 16 | import io.f1.backend.domain.game.model.RoomState; |
@@ -38,9 +39,10 @@ public class GameService { |
38 | 39 |
|
39 | 40 | private static final int START_DELAY = 5; |
40 | 41 |
|
41 | | - private final MessageSender messageSender; |
42 | | - private final TimerService timerService; |
43 | 42 | private final QuizService quizService; |
| 43 | + private final RoomService roomService; |
| 44 | + private final TimerService timerService; |
| 45 | + private final MessageSender messageSender; |
44 | 46 | private final RoomRepository roomRepository; |
45 | 47 | private final ApplicationEventPublisher eventPublisher; |
46 | 48 |
|
@@ -82,23 +84,29 @@ public void gameEnd(Room room) { |
82 | 84 |
|
83 | 85 | Map<String, Player> playerSessionMap = room.getPlayerSessionMap(); |
84 | 86 |
|
85 | | - messageSender.send( |
86 | | - destination, |
87 | | - MessageType.GAME_SETTING, |
88 | | - toGameSettingResponse(room.getGameSetting(), room.getCurrentQuestion().getQuiz())); |
89 | | - messageSender.send(destination, MessageType.PLAYER_LIST, toPlayerListResponse(room)); |
90 | | - messageSender.send(destination, MessageType.ROOM_SETTING, toRoomSettingResponse(room)); |
91 | | - messageSender.send( |
92 | | - destination, |
93 | | - MessageType.GAME_RESULT, |
94 | | - toGameResultListResponse(playerSessionMap, room.getGameSetting().getRound())); |
| 87 | + messageSender.send(destination, MessageType.GAME_RESULT, toGameResultListResponse(playerSessionMap, room.getGameSetting().getRound())); |
| 88 | + |
| 89 | + List<Player> disconnectedPlayers = new ArrayList<>(); |
95 | 90 |
|
96 | 91 | room.initializeRound(); |
97 | 92 | for (Player player : playerSessionMap.values()) { |
| 93 | + if(player.getState().equals(ConnectionState.DISCONNECTED)) { |
| 94 | + disconnectedPlayers.add(player); |
| 95 | + } |
98 | 96 | player.initializeCorrectCount(); |
99 | 97 | player.toggleReady(); |
100 | 98 | } |
| 99 | + |
| 100 | + for(Player player : disconnectedPlayers) { |
| 101 | + String sessionId = room.getUserIdSessionMap().get(player.id); |
| 102 | + roomService.exitRoomForDisconnectedPlayer(roomId, player, sessionId); |
| 103 | + } |
| 104 | + |
101 | 105 | room.updateRoomState(RoomState.WAITING); |
| 106 | + messageSender.send(destination, MessageType.PLAYER_LIST, toPlayerListResponse(room)); |
| 107 | + messageSender.send(destination, MessageType.GAME_SETTING, toGameSettingResponse(room.getGameSetting(), room.getCurrentQuestion() |
| 108 | + .getQuiz())); |
| 109 | + messageSender.send(destination, MessageType.ROOM_SETTING, toRoomSettingResponse(room)); |
102 | 110 | } |
103 | 111 |
|
104 | 112 | private boolean validateReadyStatus(Room room) { |
|
0 commit comments