Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
const { getRooms, getRoom, updateRoom, createNewRoom } = require('../services/roomService');
|
||||
const { getRooms, getRoom, updateRoom, createNewRoom, deleteRoom } = require('../services/roomService');
|
||||
const { sendToOnePlayerRooms, sendToOnePlayerData, sendWinner } = require('../socket/emits');
|
||||
|
||||
module.exports = socket => {
|
||||
@@ -8,6 +8,7 @@ module.exports = socket => {
|
||||
const room = await getRoom(req.session.roomId);
|
||||
// Handle the situation when the server crashes and any player reconnects after the time has expired
|
||||
// Typically, the responsibility for changing players is managed by gameHandler.js.
|
||||
if(!room) return;
|
||||
if (room.nextMoveTime <= Date.now()) {
|
||||
room.changeMovingPlayer();
|
||||
await updateRoom(room);
|
||||
@@ -26,7 +27,23 @@ module.exports = socket => {
|
||||
sendToOnePlayerRooms(socket.id, await getRooms());
|
||||
};
|
||||
|
||||
const handleDeleteRoom = async roomId => {
|
||||
try {
|
||||
console.log('🗑️ Attempting to delete room:', roomId);
|
||||
const result = await deleteRoom(roomId);
|
||||
console.log('✅ Room deleted successfully:', result);
|
||||
const updatedRooms = await getRooms();
|
||||
console.log('📋 Updated room count:', updatedRooms.length);
|
||||
console.log('📤 Sending updated rooms to socket:', socket.id);
|
||||
sendToOnePlayerRooms(socket.id, updatedRooms);
|
||||
} catch (error) {
|
||||
console.error('❌ Error deleting room:', error);
|
||||
socket.emit('error:deleteRoom', 'Failed to delete room');
|
||||
}
|
||||
};
|
||||
|
||||
socket.on('room:data', handleGetData);
|
||||
socket.on('room:rooms', handleGetAllRooms);
|
||||
socket.on('room:create', handleCreateRoom);
|
||||
socket.on('room:delete', handleDeleteRoom);
|
||||
};
|
||||
|
||||
@@ -5,6 +5,18 @@ const timeoutManager = require('./timeoutManager.js');
|
||||
const PawnSchema = require('./pawn');
|
||||
const PlayerSchema = require('./player');
|
||||
|
||||
// Safe/colored box positions in Ludo (where pawns cannot be killed)
|
||||
const SAFE_POSITIONS = [16, 29, 42, 55];
|
||||
const HOME_ENTRY_POSITIONS = [66, 27, 40, 53];
|
||||
const STAR_POSITIONS = [63, 24, 37, 50];
|
||||
|
||||
const isSafePosition = (position) => {
|
||||
return SAFE_POSITIONS.includes(position)
|
||||
|| HOME_ENTRY_POSITIONS.includes(position)
|
||||
|| STAR_POSITIONS.includes(position)
|
||||
|| position > 66; // Also safe in home stretch
|
||||
};
|
||||
|
||||
const RoomSchema = new mongoose.Schema({
|
||||
name: String,
|
||||
private: { type: Boolean, default: false },
|
||||
@@ -36,6 +48,11 @@ const RoomSchema = new mongoose.Schema({
|
||||
});
|
||||
|
||||
RoomSchema.methods.beatPawns = function (position, attackingPawnColor) {
|
||||
// Do not beat pawns on safe/colored positions
|
||||
if (isSafePosition(position)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const pawnsOnPosition = this.pawns.filter(pawn => pawn.position === position);
|
||||
pawnsOnPosition.forEach(pawn => {
|
||||
if (pawn.color !== attackingPawnColor) {
|
||||
|
||||
@@ -23,8 +23,21 @@ const createNewRoom = async data => {
|
||||
return room;
|
||||
};
|
||||
|
||||
const deleteRoom = async roomId => {
|
||||
return await Room.findByIdAndDelete(roomId).exec();
|
||||
};
|
||||
|
||||
Room.watch().on('change', async data => {
|
||||
sendToPlayersData(await getRoom(data.documentKey._id));
|
||||
// Ignore delete operations
|
||||
if (data.operationType === 'delete') {
|
||||
console.log('🗑️ Room deleted, skipping sendToPlayersData');
|
||||
return;
|
||||
}
|
||||
|
||||
const room = await getRoom(data.documentKey._id);
|
||||
if (room) {
|
||||
sendToPlayersData(room);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = { getRoom, getRooms, updateRoom, getJoinableRoom, createNewRoom };
|
||||
module.exports = { getRoom, getRooms, updateRoom, getJoinableRoom, createNewRoom, deleteRoom };
|
||||
|
||||
Reference in New Issue
Block a user