Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-01-30 03:01:14 +05:30
parent 274c0b98e3
commit 7a55f6c376
9 changed files with 90 additions and 6 deletions
+18 -1
View File
@@ -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);
};
+17
View File
@@ -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) {
+15 -2
View File
@@ -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 };