Skip to content

Commit fb3be98

Browse files
authored
♻️ refactor: SSE 방 삭제 이벤트 퍼블리싱, 유저 수 조회 메서드 변경 (#127)
* ♻️ refactor: SSE 방 삭제 이벤트 퍼블리싱, 유저 수 조회 메서드 변경 * 🐛 fix: 라운드, 시간제한 변경 시, SSE 업데이트 동작 삭제 * chore: Java 스타일 수정 --------- Co-authored-by: github-actions <>
1 parent aea4c01 commit fb3be98

File tree

8 files changed

+33
-28
lines changed

8 files changed

+33
-28
lines changed

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,16 +219,9 @@ public void changeGameSetting(
219219
if (!request.change(room, quizService)) {
220220
return;
221221
}
222-
request.afterChange(room, messageSender);
222+
request.afterChange(room, messageSender, eventPublisher, quizService);
223223

224224
broadcastGameSetting(room);
225-
226-
RoomUpdatedEvent roomUpdatedEvent =
227-
new RoomUpdatedEvent(
228-
room,
229-
quizService.getQuizWithQuestionsById(room.getGameSetting().getQuizId()));
230-
231-
eventPublisher.publishEvent(roomUpdatedEvent);
232225
}
233226

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

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

Lines changed: 3 additions & 0 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;
@@ -349,6 +350,8 @@ 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/mapper/RoomMapper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public static RoomSettingResponse toRoomSettingResponse(Room room) {
4848
return new RoomSettingResponse(
4949
room.getRoomSetting().roomName(),
5050
room.getRoomSetting().maxUserCount(),
51+
room.getCurrentUserCnt(),
5152
room.getRoomSetting().locked());
5253
}
5354

@@ -71,7 +72,7 @@ public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
7172
room.getId(),
7273
room.getRoomSetting().roomName(),
7374
room.getRoomSetting().maxUserCount(),
74-
room.getPlayerSessionMap().size(),
75+
room.getCurrentUserCnt(),
7576
room.getRoomSetting().locked(),
7677
room.getState().name(),
7778
quiz.getTitle(),
@@ -111,9 +112,9 @@ public static QuestionStartResponse toQuestionStartResponse(Room room, int delay
111112
room.getCurrentQuestion().getId(),
112113
room.getCurrentRound(),
113114
Instant.now().plusSeconds(delay),
114-
room.getGameSetting().getTimeLimit(),
115+
room.getTimeLimit(),
115116
Instant.now(),
116-
room.getGameSetting().getRound());
117+
room.getRound());
117118
}
118119

119120
public static GameResultResponse toGameResultResponse(

backend/src/main/java/io/f1/backend/domain/game/sse/mapper/SseMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static LobbySseEvent<RoomCreatedPayload> fromRoomCreated(RoomCreatedEvent
2121
room.getId(),
2222
room.getRoomSetting().roomName(),
2323
room.getRoomSetting().maxUserCount(),
24-
room.getPlayerSessionMap().size(),
24+
room.getCurrentUserCnt(),
2525
room.getRoomSetting().locked(),
2626
room.getState().name(),
2727
quiz.getTitle(),
@@ -38,7 +38,7 @@ public static LobbySseEvent<RoomUpdatedPayload> fromRoomUpdated(RoomUpdatedEvent
3838
RoomUpdatedPayload payload =
3939
new RoomUpdatedPayload(
4040
room.getId(),
41-
room.getPlayerSessionMap().size(),
41+
room.getCurrentUserCnt(),
4242
room.getState().name(),
4343
quiz.getTitle(),
4444
quiz.getDescription(),

0 commit comments

Comments
 (0)