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 ()=> {
await client.close();
console.log("Database Connected");
console.log("Database Disconnected");
process.exit(0);
})
});
} catch (err){
console.error("DB 연결 실패: " + err);
process.exit(1);

View File

@ -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);

View File

@ -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);

View File

@ -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)