Skip to content

Commit 34141eb

Browse files
authored
fix: 대기방 준비 상태 관련 수정 (#113)
* fix: 방장 권한 위임 시 준비 상태 변경 수정 * fix: userList 방장이 제일 앞으로 오도록 수정 * fix: 게임 종료 후 준비 상태 해제
1 parent e7ad2c6 commit 34141eb

3 files changed

Lines changed: 50 additions & 4 deletions

File tree

gotcha-socket/src/main/java/socket_server/domain/game/service/GameStartService.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.beans.factory.annotation.Qualifier;
56
import org.springframework.scheduling.TaskScheduler;
67
import org.springframework.stereotype.Service;
78
import socket_server.common.exception.ErrorType;
@@ -34,7 +35,7 @@
3435
@Service
3536
@RequiredArgsConstructor
3637
public class GameStartService {
37-
38+
@Qualifier("taskScheduler")
3839
private final TaskScheduler taskScheduler;
3940
private final RoomUserService roomUserService;
4041
private final GamePlayerRepository gamePlayerRepository;
@@ -91,6 +92,16 @@ public void startGame(String roomId, String userUuid, ErrorType errorType) {
9192

9293
// 8. 5초 후 게임 시작(EntryPoint)
9394
taskScheduler.schedule(() -> roundStartService.startNextRound(roomId), Instant.now().plusSeconds(5));
95+
96+
List<RoomUserInfo> users = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, errorType));
97+
String ownerUuid = roomMetadata.getOwnerUuid();
98+
99+
for (RoomUserInfo user : users) {
100+
if (!user.getUserUuid().equals(ownerUuid)) {
101+
user.setReady(false);
102+
roomUserRepository.saveUserToRoom(user, roomId, errorType);
103+
}
104+
}
94105
}
95106

96107
private void saveGame(Game game) {

gotcha-socket/src/main/java/socket_server/domain/room/service/RoomService.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ private void broadcastUpdatedRoomInfoToListAndRoom(String roomId, RoomMetadata m
171171
RoomSummaryRes summary = RoomSummaryRes.of(metadata, currentUser);
172172
lobbyBroadCaster.broadcastToRoomList("SYSTEM", RoomEventType.UPDATE, summary);
173173

174-
List<RoomUserInfo> userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR);
174+
List<RoomUserInfo> userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR));
175+
sortUserListWithOwnerFirst(userList, metadata.getOwnerUuid());
175176
RoomDetailRes roomDetailRes = new RoomDetailRes(RoomInfoRes.from(metadata), userList);
176177
roomBroadcaster.broadcastToRoom(roomId, "SYSTEM", RoomEventType.UPDATE, roomDetailRes);
177178

@@ -224,8 +225,21 @@ public RoomDetailRes getRoomDetails(String roomId, String userUuid) {
224225
}
225226

226227
RoomMetadata metadata = RoomMetadata.fromRedisMap(roomId, roomData);
227-
List<RoomUserInfo> userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR);
228+
List<RoomUserInfo> userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR));
229+
sortUserListWithOwnerFirst(userList, metadata.getOwnerUuid());
228230

229231
return new RoomDetailRes(RoomInfoRes.from(metadata), userList);
230232
}
233+
234+
private void sortUserListWithOwnerFirst(List<RoomUserInfo> userList, String ownerUuid) {
235+
userList.sort((u1, u2) -> {
236+
if (u1.getUserUuid().equals(ownerUuid)) {
237+
return -1;
238+
}
239+
if (u2.getUserUuid().equals(ownerUuid)) {
240+
return 1;
241+
}
242+
return 0;
243+
});
244+
}
231245
}

gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import socket_server.domain.room.repository.RoomRepository;
2020
import socket_server.domain.room.repository.RoomUserRepository;
2121

22+
import java.util.ArrayList;
2223
import java.util.List;
2324
import java.util.Map;
2425

@@ -104,6 +105,10 @@ public void passRoomOwner(String roomId, String oldOwnerId, String newOwnerId) {
104105
throw new SocketCustomException(ROOM_ERROR, RoomExceptionCode.NOT_ROOM_OWNER);
105106
}
106107

108+
RoomUserInfo oldOwner = roomUserRepository.findUserInfoInRoom(roomId, oldOwnerId, ROOM_ERROR);
109+
oldOwner.setReady(false);
110+
roomUserRepository.saveUserToRoom(oldOwner, roomId, ROOM_ERROR);
111+
107112
RoomUserInfo newOwner = roomUserRepository.findUserInfoInRoom(roomId, newOwnerId, ROOM_ERROR);
108113

109114
changeRoomOwner(roomId, newOwner);
@@ -147,14 +152,18 @@ private void processUserExit(String roomId, String userUuid, boolean isKicked) {
147152
}
148153

149154
public void changeRoomOwner(String roomId, RoomUserInfo newOwner) {
155+
newOwner.setReady(true);
156+
roomUserRepository.saveUserToRoom(newOwner, roomId, ROOM_ERROR);
157+
150158
roomRepository.updateAllFields(roomId, Map.of(
151159
RoomField.OWNER_UUID.getRedisField(), newOwner.getUserUuid(),
152160
RoomField.OWNER.getRedisField(), newOwner.getNickname()
153161
));
154162

155163
RoomMetadata updatedMetadata = RoomMetadata.fromRedisMap(roomId, roomRepository.getRoomData(roomId));
156164
RoomInfoRes roomInfoRes = RoomInfoRes.from(updatedMetadata);
157-
List<RoomUserInfo> userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR);
165+
List<RoomUserInfo> userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR));
166+
sortUserListWithOwnerFirst(userList, updatedMetadata.getOwnerUuid());
158167
RoomDetailRes detailRes = new RoomDetailRes(roomInfoRes, userList);
159168
roomBroadcaster.broadcastToRoom(roomId, newOwner.getUserUuid(), RoomEventType.UPDATE, detailRes);
160169

@@ -164,6 +173,18 @@ public void changeRoomOwner(String roomId, RoomUserInfo newOwner) {
164173
log.info("방장 권한이 {}에게 위임되었습니다. (roomId: {})", newOwner.getUserUuid(), roomId);
165174
}
166175

176+
private void sortUserListWithOwnerFirst(List<RoomUserInfo> userList, String ownerUuid) {
177+
userList.sort((u1, u2) -> {
178+
if (u1.getUserUuid().equals(ownerUuid)) {
179+
return -1;
180+
}
181+
if (u2.getUserUuid().equals(ownerUuid)) {
182+
return 1;
183+
}
184+
return 0;
185+
});
186+
}
187+
167188
public RoomMetadata validateRoomOwnerAndGetRoomMetadata(String roomId, String userUuid) {
168189
if(!validateRoomOwner(roomId, userUuid)){
169190
throw new SocketCustomException(ROOM_ERROR, RoomExceptionCode.NOT_ROOM_OWNER);

0 commit comments

Comments
 (0)