DO-49 이전 커밋에서 누락된 항목 추가
This commit is contained in:
parent
072876bbf0
commit
886cb4f08c
4
app.js
4
app.js
@ -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);
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user