DO-57 [Feat] 소켓 서버 imageIndex 항목 추가

This commit is contained in:
Jay 2025-03-26 01:55:37 +09:00
parent 8618e032d3
commit ec0be1ef3f
3 changed files with 15 additions and 6 deletions

View File

@ -6,13 +6,15 @@ module.exports = function(io, socket, gameState) {
try { try {
const rating = data.rating; const rating = data.rating;
const nickname = data.nickname; const nickname = data.nickname;
const imageIndex = data.imageIndex;
gameState.playerRating.set(socket.id, rating); gameState.playerRating.set(socket.id, rating);
gameState.nickname.set(socket.id, nickname); 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) { } catch (err) {
logger.error(`플레이어 등록 중 오류: ${err}`); logger.error(`플레이어 등록 중 오류: ${err}`);
@ -27,6 +29,7 @@ module.exports = function(io, socket, gameState) {
// 플레이어 매칭 정보 제거 // 플레이어 매칭 정보 제거
gameState.playerRating.delete(socket.id); gameState.playerRating.delete(socket.id);
gameState.nickname.delete(socket.id); gameState.nickname.delete(socket.id);
gameState.imageIndex.delete(socket.id);
gameState.matchingTimeouts.delete(socket.id); gameState.matchingTimeouts.delete(socket.id);
socket.emit('switchAI', { 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; let matchedRoom = null;
// 1. 같은 급수의 방 찾기 // 1. 같은 급수의 방 찾기
@ -60,19 +63,21 @@ module.exports = function(io, socket, gameState) {
// 흑백 여부 결정 50% 확률 // 흑백 여부 결정 50% 확률
let isHostFirst = Math.random() < 0.5; let isHostFirst = Math.random() < 0.5;
// 클라이언트에게 방 정보 전송 (상대 급수 정보 포함) // 클라이언트에게 방 정보 전송 (상대 정보 포함)
socket.emit('joinRoom', { socket.emit('joinRoom', {
roomId: roomId, roomId: roomId,
opponentRating: gameState.playerRating.get(matchedRoom.hostId), opponentRating: gameState.playerRating.get(matchedRoom.hostId),
opponentNickname: gameState.nickname.get(matchedRoom.hostId), opponentNickname: gameState.nickname.get(matchedRoom.hostId),
opponentImageIndex: gameState.imageIndex.get(matchedRoom.imageIndex),
isBlack: !isHostFirst isBlack: !isHostFirst
}); });
// 상대방에게 게임 시작 알림 (내 닉네임과 급수 정보 포함) // 상대방에게 게임 시작 알림 (내 정보 포함)
socket.to(roomId).emit('startGame', { socket.to(roomId).emit('startGame', {
opponentId: socket.id, opponentId: socket.id,
opponentRating: playerRating, opponentRating: playerRating,
opponentNickname: nickname, opponentNickname: nickname,
opponentImageIndex: imageIndex,
isBlack: isHostFirst isBlack: isHostFirst
}); });
@ -87,7 +92,8 @@ module.exports = function(io, socket, gameState) {
gameState.rooms.push({ gameState.rooms.push({
roomId: roomId, roomId: roomId,
hostId: socket.id, hostId: socket.id,
rating: playerRating rating: playerRating,
imageIndex: imageIndex
}); });
gameState.socketRooms.set(socket.id, roomId); gameState.socketRooms.set(socket.id, roomId);

View File

@ -23,6 +23,7 @@ module.exports = function(io, socket, gameState) {
gameState.socketRooms.delete(socket.id); gameState.socketRooms.delete(socket.id);
gameState.playerRating.delete(socket.id); gameState.playerRating.delete(socket.id);
gameState.nickname.delete(socket.id); gameState.nickname.delete(socket.id);
gameState.imageIndex.delete(socket.id);
logger.info(`방 나가기 처리: 플레이어 ${socket.id}, 방 ${roomId}`); logger.info(`방 나가기 처리: 플레이어 ${socket.id}, 방 ${roomId}`);
} catch (err) { } catch (err) {

View File

@ -10,6 +10,7 @@ const gameState = {
socketRooms: new Map(), // 소켓ID와 방ID 매핑 socketRooms: new Map(), // 소켓ID와 방ID 매핑
playerRating: new Map(), // 소켓ID와 플레이어 급수 매핑 playerRating: new Map(), // 소켓ID와 플레이어 급수 매핑
nickname: new Map(), // 플레이어 닉네임 nickname: new Map(), // 플레이어 닉네임
imageIndex: new Map(), // 플레이어 프로필 이미지 인덱스
matchingTimeouts: new Map(), // 매치메이킹 타임아웃 matchingTimeouts: new Map(), // 매치메이킹 타임아웃
}; };
@ -59,6 +60,7 @@ module.exports = function(server) {
// 플레이어 매칭 정보 제거 // 플레이어 매칭 정보 제거
gameState.playerRating.delete(socket.id); gameState.playerRating.delete(socket.id);
gameState.nickname.delete(socket.id); gameState.nickname.delete(socket.id);
gameState.imageIndex.delete(socket.id);
}); });
}); });
}; };