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