DO-49 이전 커밋에서 누락된 항목 추가

This commit is contained in:
fiore 2025-03-25 09:22:54 +09:00
parent 072876bbf0
commit 886cb4f08c
4 changed files with 19 additions and 28 deletions

4
app.js
View File

@ -49,9 +49,9 @@ async function connectDB(){
// 연결 종료 처리 // 연결 종료 처리
process.on("SIGINT", async ()=> { process.on("SIGINT", async ()=> {
await client.close(); await client.close();
console.log("Database Connected"); console.log("Database Disconnected");
process.exit(0); process.exit(0);
}) });
} catch (err){ } catch (err){
console.error("DB 연결 실패: " + err); console.error("DB 연결 실패: " + err);
process.exit(1); process.exit(1);

View File

@ -5,12 +5,14 @@ module.exports = function(io, socket, gameState) {
socket.on('registerPlayer', function(data) { socket.on('registerPlayer', function(data) {
try { try {
const rating = data.rating; const rating = data.rating;
const nickname = data.nickname;
gameState.playerRating.set(socket.id, rating); 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) { } catch (err) {
logger.error(`플레이어 등록 중 오류: ${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; let matchedRoom = null;
// 1. 같은 급수의 방 찾기 // 1. 같은 급수의 방 찾기
@ -44,19 +46,22 @@ module.exports = function(io, socket, gameState) {
// 클라이언트에게 방 정보 전송 (상대 급수 정보 포함) // 클라이언트에게 방 정보 전송 (상대 급수 정보 포함)
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),
}); });
// 상대방에게 게임 시작 알림 (내 급수 정보 포함) // 상대방에게 게임 시작 알림 (내 닉네임과 급수 정보 포함)
socket.to(roomId).emit('startGame', { socket.to(roomId).emit('startGame', {
opponentId: socket.id, opponentId: socket.id,
opponentRating: playerRating opponentRating: playerRating,
opponentNickname: nickname,
}); });
logger.info(`매칭 성공: ${socket.id}(${playerRating}급) - ${matchedRoom.hostId}(${gameState.playerRating.get(matchedRoom.hostId)}급)`); logger.info(`매칭 성공: ${socket.id}(${playerRating}급) - ${matchedRoom.hostId}(${gameState.playerRating.get(matchedRoom.hostId)}급)`);
} else { // 4. 매칭된 방이 없으면 새 방 생성 }
// 4. 매칭된 방이 없으면 새 방 생성
else {
logger.info("매칭된 방 없음!")
const roomId = uuidv4(); const roomId = uuidv4();
socket.join(roomId); socket.join(roomId);

View File

@ -7,8 +7,8 @@ module.exports = function(io, socket, gameState) {
const roomId = roomData.roomId; const roomId = roomData.roomId;
socket.leave(roomId); socket.leave(roomId);
socket.emit('exitRoom'); socket.emit('exitRoom',{message: "방을 떠났습니다."});
socket.to(roomId).emit('endGame'); socket.to(roomId).emit('endGame', { message: "상대방이 방을 떠났습니다." });
// 대기방 목록에서 제거 // 대기방 목록에서 제거
gameState.rooms = gameState.rooms.filter(room => room.roomId !== roomId); gameState.rooms = gameState.rooms.filter(room => room.roomId !== roomId);

View File

@ -8,7 +8,8 @@ const { logger } = require('../utils/logger');
const gameState = { const gameState = {
rooms: [], // {roomId, hostId, rating} 형태로 저장 rooms: [], // {roomId, hostId, rating} 형태로 저장
socketRooms: new Map(), // 소켓ID와 방ID 매핑 socketRooms: new Map(), // 소켓ID와 방ID 매핑
playerRating: new Map() // 소켓ID와 플레이어 급수 매핑 playerRating: new Map(), // 소켓ID와 플레이어 급수 매핑
nickname: new Map() // 플레이어 닉네임
}; };
module.exports = function(server) { module.exports = function(server) {
@ -19,21 +20,6 @@ module.exports = function(server) {
io.on('connection', function(socket) { io.on('connection', function(socket) {
console.log('Connected: ' + socket.id); 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) matchmakingHandlers(io, socket, gameState)