From ec0be1ef3f6803d36ff789fc534fd29cadaa1193 Mon Sep 17 00:00:00 2001 From: Jay <96156114+jaydev00a@users.noreply.github.com> Date: Wed, 26 Mar 2025 01:55:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?DO-57=20[Feat]=20=EC=86=8C=EC=BC=93=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20imageIndex=20=ED=95=AD=EB=AA=A9=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- socket/handlers/matchmaking.js | 18 ++++++++++++------ socket/handlers/roomEvents.js | 1 + socket/index.js | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/socket/handlers/matchmaking.js b/socket/handlers/matchmaking.js index e907d3b..4ce546c 100644 --- a/socket/handlers/matchmaking.js +++ b/socket/handlers/matchmaking.js @@ -6,13 +6,15 @@ module.exports = function(io, socket, gameState) { try { const rating = data.rating; const nickname = data.nickname; + const imageIndex = data.imageIndex; gameState.playerRating.set(socket.id, rating); gameState.nickname.set(socket.id, nickname); + gameState.imageIndex.set(socket.id, imageIndex); - logger.info(`플레이어 등록: ID ${socket.id}, 닉네임: ${nickname}, 급수 ${rating}`); + logger.info(`플레이어 등록: ID ${socket.id}, 닉네임: ${nickname}, 급수 ${rating}, 프로필 이미지 인덱스: ${imageIndex}`); // 급수에 따른 매칭 진행 - findMatch(socket, rating, nickname); + findMatch(socket, rating, nickname, imageIndex); } catch (err) { logger.error(`플레이어 등록 중 오류: ${err}`); @@ -27,6 +29,7 @@ module.exports = function(io, socket, gameState) { // 플레이어 매칭 정보 제거 gameState.playerRating.delete(socket.id); gameState.nickname.delete(socket.id); + gameState.imageIndex.delete(socket.id); gameState.matchingTimeouts.delete(socket.id); socket.emit('switchAI', { @@ -34,7 +37,7 @@ module.exports = function(io, socket, gameState) { }); } - const findMatch = (socket, playerRating, nickname) => { + const findMatch = (socket, playerRating, nickname, imageIndex) => { let matchedRoom = null; // 1. 같은 급수의 방 찾기 @@ -60,19 +63,21 @@ module.exports = function(io, socket, gameState) { // 흑백 여부 결정 50% 확률 let isHostFirst = Math.random() < 0.5; - // 클라이언트에게 방 정보 전송 (상대 급수 정보 포함) + // 클라이언트에게 방 정보 전송 (상대 정보 포함) socket.emit('joinRoom', { roomId: roomId, opponentRating: gameState.playerRating.get(matchedRoom.hostId), opponentNickname: gameState.nickname.get(matchedRoom.hostId), + opponentImageIndex: gameState.imageIndex.get(matchedRoom.imageIndex), isBlack: !isHostFirst }); - // 상대방에게 게임 시작 알림 (내 닉네임과 급수 정보 포함) + // 상대방에게 게임 시작 알림 (내 정보 포함) socket.to(roomId).emit('startGame', { opponentId: socket.id, opponentRating: playerRating, opponentNickname: nickname, + opponentImageIndex: imageIndex, isBlack: isHostFirst }); @@ -87,7 +92,8 @@ module.exports = function(io, socket, gameState) { gameState.rooms.push({ roomId: roomId, hostId: socket.id, - rating: playerRating + rating: playerRating, + imageIndex: imageIndex }); gameState.socketRooms.set(socket.id, roomId); diff --git a/socket/handlers/roomEvents.js b/socket/handlers/roomEvents.js index f00d865..9a67c49 100644 --- a/socket/handlers/roomEvents.js +++ b/socket/handlers/roomEvents.js @@ -23,6 +23,7 @@ module.exports = function(io, socket, gameState) { gameState.socketRooms.delete(socket.id); gameState.playerRating.delete(socket.id); gameState.nickname.delete(socket.id); + gameState.imageIndex.delete(socket.id); logger.info(`방 나가기 처리: 플레이어 ${socket.id}, 방 ${roomId}`); } catch (err) { diff --git a/socket/index.js b/socket/index.js index d6d3c54..3fdb54c 100644 --- a/socket/index.js +++ b/socket/index.js @@ -10,6 +10,7 @@ const gameState = { socketRooms: new Map(), // 소켓ID와 방ID 매핑 playerRating: new Map(), // 소켓ID와 플레이어 급수 매핑 nickname: new Map(), // 플레이어 닉네임 + imageIndex: new Map(), // 플레이어 프로필 이미지 인덱스 matchingTimeouts: new Map(), // 매치메이킹 타임아웃 }; @@ -59,6 +60,7 @@ module.exports = function(server) { // 플레이어 매칭 정보 제거 gameState.playerRating.delete(socket.id); gameState.nickname.delete(socket.id); + gameState.imageIndex.delete(socket.id); }); }); }; \ No newline at end of file From 270da3b889022943f2957b7ed9542f590b14eb2a Mon Sep 17 00:00:00 2001 From: Jay <96156114+jaydev00a@users.noreply.github.com> Date: Wed, 26 Mar 2025 02:20:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?DO-57=20[Style]=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- socket/handlers/matchmaking.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/socket/handlers/matchmaking.js b/socket/handlers/matchmaking.js index 4ce546c..7cac4bd 100644 --- a/socket/handlers/matchmaking.js +++ b/socket/handlers/matchmaking.js @@ -104,7 +104,7 @@ module.exports = function(io, socket, gameState) { logger.info(`대기방 생성: ID ${socket.id}, 급수 ${playerRating}, 방 ID ${roomId}`); - // 10초 타임아웃 설정 + // 15초 타임아웃 설정 const timeoutId = setTimeout(() => { logger.info("타이머 종료, 15초 경과"); // 타임 아웃 AI로 던지기