diff --git a/app.js b/app.js index eabffc8..75555bb 100644 --- a/app.js +++ b/app.js @@ -49,9 +49,9 @@ async function connectDB(){ // 연결 종료 처리 process.on("SIGINT", async ()=> { await client.close(); - console.log("Database Connected"); + console.log("Database Disconnected"); process.exit(0); - }) + }); } catch (err){ console.error("DB 연결 실패: " + err); process.exit(1); diff --git a/socket/handlers/matchmaking.js b/socket/handlers/matchmaking.js index 8a8fee6..a1be977 100644 --- a/socket/handlers/matchmaking.js +++ b/socket/handlers/matchmaking.js @@ -5,12 +5,14 @@ module.exports = function(io, socket, gameState) { socket.on('registerPlayer', function(data) { try { const rating = data.rating; + const nickname = data.nickname; gameState.playerRating.set(socket.id, rating); + gameState.nickname.set(socket.id, nickname); - logger.info(`플레이어 등록: ID ${socket.id}, 급수 ${rating}`); + logger.info(`플레이어 등록: ID ${socket.id}, 닉네임: ${nickname}, 급수 ${rating}`); // 급수에 따른 매칭 진행 - findMatch(socket, rating); + findMatch(socket, rating, nickname); } catch (err) { logger.error(`플레이어 등록 중 오류: ${err}`); @@ -18,7 +20,7 @@ module.exports = function(io, socket, gameState) { } }); - const findMatch = (socket, playerRating) => { + const findMatch = (socket, playerRating, nickname) => { let matchedRoom = null; // 1. 같은 급수의 방 찾기 @@ -44,19 +46,22 @@ module.exports = function(io, socket, gameState) { // 클라이언트에게 방 정보 전송 (상대 급수 정보 포함) socket.emit('joinRoom', { roomId: roomId, - opponentRating: gameState.playerRating.get(matchedRoom.hostId) + opponentRating: gameState.playerRating.get(matchedRoom.hostId), + opponentNickname: gameState.nickname.get(matchedRoom.hostId), }); - // 상대방에게 게임 시작 알림 (내 급수 정보 포함) + // 상대방에게 게임 시작 알림 (내 닉네임과 급수 정보 포함) socket.to(roomId).emit('startGame', { opponentId: socket.id, - opponentRating: playerRating + opponentRating: playerRating, + opponentNickname: nickname, }); logger.info(`매칭 성공: ${socket.id}(${playerRating}급) - ${matchedRoom.hostId}(${gameState.playerRating.get(matchedRoom.hostId)}급)`); - } else { // 4. 매칭된 방이 없으면 새 방 생성 + } + // 4. 매칭된 방이 없으면 새 방 생성 + else { - logger.info("매칭된 방 없음!") const roomId = uuidv4(); socket.join(roomId); diff --git a/socket/handlers/roomEvents.js b/socket/handlers/roomEvents.js index f822546..aeaf7ca 100644 --- a/socket/handlers/roomEvents.js +++ b/socket/handlers/roomEvents.js @@ -7,8 +7,8 @@ module.exports = function(io, socket, gameState) { const roomId = roomData.roomId; socket.leave(roomId); - socket.emit('exitRoom'); - socket.to(roomId).emit('endGame'); + socket.emit('exitRoom',{message: "방을 떠났습니다."}); + socket.to(roomId).emit('endGame', { message: "상대방이 방을 떠났습니다." }); // 대기방 목록에서 제거 gameState.rooms = gameState.rooms.filter(room => room.roomId !== roomId); diff --git a/socket/index.js b/socket/index.js index a11a46d..01c1acf 100644 --- a/socket/index.js +++ b/socket/index.js @@ -8,7 +8,8 @@ const { logger } = require('../utils/logger'); const gameState = { rooms: [], // {roomId, hostId, rating} 형태로 저장 socketRooms: new Map(), // 소켓ID와 방ID 매핑 - playerRating: new Map() // 소켓ID와 플레이어 급수 매핑 + playerRating: new Map(), // 소켓ID와 플레이어 급수 매핑 + nickname: new Map() // 플레이어 닉네임 }; module.exports = function(server) { @@ -19,21 +20,6 @@ module.exports = function(server) { io.on('connection', function(socket) { console.log('Connected: ' + socket.id); - // 기존 단순 매칭 코드 - // if (rooms.length > 0) { - // var roomId = rooms.shift(); - // socket.join(roomId) - // socket.emit('joinRoom', { roomId: roomId }); - // socket.to(roomId).emit('startGame', { roomId: socket.id }); - // socketRooms.set(socket.id, roomId); - // } else { - // var roomId = uuidv4(); - // socket.join(roomId); - // socket.emit('createRoom', { room: roomId }); - // rooms.push(roomId); - // socketRooms.set(socket.id, roomId); - // } - // 매칭 관련 이벤트 핸들러 등록 matchmakingHandlers(io, socket, gameState)