Skip to content

Commit 71c6c22

Browse files
authored
๐Ÿ”– release: v0.0.8
2 parents e845d18 + e8d291e commit 71c6c22

File tree

15 files changed

+150
-44
lines changed

15 files changed

+150
-44
lines changed

โ€Žbackend/src/main/java/io/f1/backend/domain/game/app/GameService.javaโ€Ž

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,13 @@ public void gameEnd(Room room) {
176176
room.initializePlayers();
177177

178178
List<Player> disconnectedPlayers = room.getDisconnectedPlayers();
179-
roomService.handleDisconnectedPlayers(room, disconnectedPlayers);
179+
180+
if (!disconnectedPlayers.isEmpty()) {
181+
roomService.handleDisconnectedPlayers(room, disconnectedPlayers);
182+
} else {
183+
messageSender.sendBroadcast(
184+
destination, MessageType.PLAYER_LIST, toPlayerListResponse(room));
185+
}
180186

181187
room.updateRoomState(RoomState.WAITING);
182188

@@ -213,16 +219,9 @@ public void changeGameSetting(
213219
if (!request.change(room, quizService)) {
214220
return;
215221
}
216-
request.afterChange(room, messageSender);
222+
request.afterChange(room, messageSender, eventPublisher, quizService);
217223

218224
broadcastGameSetting(room);
219-
220-
RoomUpdatedEvent roomUpdatedEvent =
221-
new RoomUpdatedEvent(
222-
room,
223-
quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()));
224-
225-
eventPublisher.publishEvent(roomUpdatedEvent);
226225
}
227226

228227
private void validateRoomStart(Room room, UserPrincipal principal) {

โ€Žbackend/src/main/java/io/f1/backend/domain/game/app/RoomService.javaโ€Ž

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.f1.backend.domain.game.dto.response.RoomSettingResponse;
2727
import io.f1.backend.domain.game.dto.response.SystemNoticeResponse;
2828
import io.f1.backend.domain.game.event.RoomCreatedEvent;
29+
import io.f1.backend.domain.game.event.RoomDeletedEvent;
2930
import io.f1.backend.domain.game.model.ConnectionState;
3031
import io.f1.backend.domain.game.model.GameSetting;
3132
import io.f1.backend.domain.game.model.Player;
@@ -338,17 +339,19 @@ public void exitRoomForDisconnectedPlayer(Long roomId, Player player, String ses
338339
SystemNoticeResponse systemNoticeResponse =
339340
ofPlayerEvent(player.nickname, RoomEventType.EXIT);
340341

341-
messageSender.sendBroadcast(
342-
destination, MessageType.PLAYER_LIST, toPlayerListResponse(room));
343342
messageSender.sendBroadcast(
344343
destination, MessageType.SYSTEM_NOTICE, systemNoticeResponse);
344+
messageSender.sendBroadcast(
345+
destination, MessageType.PLAYER_LIST, toPlayerListResponse(room));
345346
}
346347
}
347348

348349
private void cleanRoom(Room room, String sessionId, Player player) {
349350
/* ๋ฐฉ ์‚ญ์ œ */
350351
if (room.isLastPlayer(sessionId)) {
351352
removeRoom(room);
353+
Long roomId = room.getId();
354+
eventPublisher.publishEvent(new RoomDeletedEvent(roomId));
352355
return;
353356
}
354357

โ€Žbackend/src/main/java/io/f1/backend/domain/game/dto/request/GameSettingChanger.javaโ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
import io.f1.backend.domain.game.websocket.MessageSender;
55
import io.f1.backend.domain.quiz.app.QuizService;
66

7+
import org.springframework.context.ApplicationEventPublisher;
8+
79
public interface GameSettingChanger {
810

911
boolean change(Room room, QuizService quizService);
1012

11-
void afterChange(Room room, MessageSender messageSender);
13+
default void afterChange(
14+
Room room,
15+
MessageSender messageSender,
16+
ApplicationEventPublisher eventPublisher,
17+
QuizService quizService) {}
1218
}

โ€Žbackend/src/main/java/io/f1/backend/domain/game/dto/request/QuizChangeRequest.javaโ€Ž

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55

66
import io.f1.backend.domain.game.dto.MessageType;
77
import io.f1.backend.domain.game.dto.response.PlayerListResponse;
8+
import io.f1.backend.domain.game.event.RoomUpdatedEvent;
89
import io.f1.backend.domain.game.model.Room;
910
import io.f1.backend.domain.game.websocket.MessageSender;
1011
import io.f1.backend.domain.quiz.app.QuizService;
1112

1213
import lombok.extern.slf4j.Slf4j;
1314

15+
import org.springframework.context.ApplicationEventPublisher;
16+
1417
@Slf4j
1518
public record QuizChangeRequest(long quizId) implements GameSettingChanger {
1619

@@ -21,17 +24,28 @@ public boolean change(Room room, QuizService quizService) {
2124
}
2225
Long questionsCount = quizService.getQuestionsCount(quizId);
2326
room.changeQuiz(quizId, questionsCount.intValue());
27+
room.resetAllPlayerReadyStates();
2428
return true;
2529
}
2630

2731
@Override
28-
public void afterChange(Room room, MessageSender messageSender) {
29-
room.resetAllPlayerReadyStates();
32+
public void afterChange(
33+
Room room,
34+
MessageSender messageSender,
35+
ApplicationEventPublisher eventPublisher,
36+
QuizService quizService) {
3037

3138
String destination = getDestination(room.getId());
3239
PlayerListResponse response = toPlayerListResponse(room);
3340

3441
log.info(response.toString());
3542
messageSender.sendBroadcast(destination, MessageType.PLAYER_LIST, response);
43+
44+
RoomUpdatedEvent roomUpdatedEvent =
45+
new RoomUpdatedEvent(
46+
room,
47+
quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()));
48+
49+
eventPublisher.publishEvent(roomUpdatedEvent);
3650
}
3751
}

โ€Žbackend/src/main/java/io/f1/backend/domain/game/dto/request/RoundChangeRequest.javaโ€Ž

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.f1.backend.domain.game.dto.request;
22

33
import io.f1.backend.domain.game.model.Room;
4-
import io.f1.backend.domain.game.websocket.MessageSender;
54
import io.f1.backend.domain.quiz.app.QuizService;
65

76
public record RoundChangeRequest(int round) implements GameSettingChanger {
@@ -17,9 +16,4 @@ public boolean change(Room room, QuizService quizService) {
1716
room.changeRound(round, questionsCount.intValue());
1817
return true;
1918
}
20-
21-
@Override
22-
public void afterChange(Room room, MessageSender messageSender) {
23-
// ๊ณ ์œ ํ•œ ํ›„์ฒ˜๋ฆฌ ๋™์ž‘ ์—†์Œ
24-
}
2519
}
Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.f1.backend.domain.game.dto.request;
22

33
import io.f1.backend.domain.game.model.Room;
4-
import io.f1.backend.domain.game.websocket.MessageSender;
54
import io.f1.backend.domain.quiz.app.QuizService;
65

76
public record TimeLimitChangeRequest(int timeLimit) implements GameSettingChanger {
@@ -14,9 +13,4 @@ public boolean change(Room room, QuizService quizService) {
1413
room.changeTimeLimit(TimeLimit.from(timeLimit));
1514
return true;
1615
}
17-
18-
@Override
19-
public void afterChange(Room room, MessageSender messageSender) {
20-
// ๊ณ ์œ ํ•œ ํ›„์ฒ˜๋ฆฌ ๋™์ž‘ ์—†์Œ
21-
}
2216
}

โ€Žbackend/src/main/java/io/f1/backend/domain/game/dto/response/PlayerListResponse.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
import java.util.List;
44

5-
public record PlayerListResponse(String host, List<PlayerResponse> players) {}
5+
public record PlayerListResponse(String host, List<PlayerResponse> players, int currentUserCount) {}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
package io.f1.backend.domain.game.dto.response;
22

3-
public record RoomSettingResponse(
4-
String roomName, int maxUserCount, int currentUserCount, boolean locked) {}
3+
public record RoomSettingResponse(String roomName, int maxUserCount, boolean locked) {}

โ€Žbackend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.javaโ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public static RoomSettingResponse toRoomSettingResponse(Room room) {
4848
return new RoomSettingResponse(
4949
room.getRoomSetting().roomName(),
5050
room.getRoomSetting().maxUserCount(),
51-
room.getPlayerSessionMap().size(),
5251
room.getRoomSetting().locked());
5352
}
5453

@@ -63,15 +62,16 @@ public static PlayerListResponse toPlayerListResponse(Room room) {
6362
.map(player -> new PlayerResponse(player.getNickname(), player.isReady()))
6463
.toList();
6564

66-
return new PlayerListResponse(room.getHost().getNickname(), playerResponseList);
65+
return new PlayerListResponse(
66+
room.getHost().getNickname(), playerResponseList, playerResponseList.size());
6767
}
6868

6969
public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
7070
return new RoomResponse(
7171
room.getId(),
7272
room.getRoomSetting().roomName(),
7373
room.getRoomSetting().maxUserCount(),
74-
room.getPlayerSessionMap().size(),
74+
room.getCurrentUserCnt(),
7575
room.getRoomSetting().locked(),
7676
room.getState().name(),
7777
quiz.getTitle(),
@@ -111,9 +111,9 @@ public static QuestionStartResponse toQuestionStartResponse(Room room, int delay
111111
room.getCurrentQuestion().getId(),
112112
room.getCurrentRound(),
113113
Instant.now().plusSeconds(delay),
114-
room.getGameSetting().getTimeLimit(),
114+
room.getTimeLimit(),
115115
Instant.now(),
116-
room.getGameSetting().getRound());
116+
room.getRound());
117117
}
118118

119119
public static GameResultResponse toGameResultResponse(

โ€Žbackend/src/main/java/io/f1/backend/domain/game/model/Room.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ public void initializePlayers() {
138138
.forEach(
139139
player -> {
140140
player.initializeCorrectCount();
141-
player.toggleReady();
142141
});
142+
resetAllPlayerReadyStates();
143143
}
144144

145145
public String getSessionIdByUserId(Long userId) {

0 commit comments

Comments
ย (0)