Implement main game mechanic
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
let cleanupGameState;
|
||||
|
||||
const setCleanupGameState = (cleanupFunction) => {
|
||||
cleanupGameState = cleanupFunction;
|
||||
};
|
||||
|
||||
let rooms = {};
|
||||
|
||||
module.exports.roomExists = (roomId) => rooms[roomId] !== undefined;
|
||||
@ -76,6 +82,7 @@ module.exports.disconnectUser = (userId) => {
|
||||
|
||||
if (memberIndex !== -1) {
|
||||
if (room.members[memberIndex].creator && room.members.length > 1) {
|
||||
// Transfer host status to the next user
|
||||
room.members[1].creator = true;
|
||||
}
|
||||
|
||||
@ -83,6 +90,9 @@ module.exports.disconnectUser = (userId) => {
|
||||
console.log(`User ${userId} disconnected from room ${roomId}`);
|
||||
|
||||
if (room.members.length === 0) {
|
||||
if (cleanupGameState) {
|
||||
cleanupGameState(roomId);
|
||||
}
|
||||
delete rooms[roomId];
|
||||
console.log(`Room ${roomId} deleted because it's empty`);
|
||||
}
|
||||
@ -90,4 +100,25 @@ module.exports.disconnectUser = (userId) => {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.validateRoomMembers = (io, roomId) => {
|
||||
if (!rooms[roomId]) return [];
|
||||
|
||||
const validMembers = [];
|
||||
const connectedSockets = io.sockets.adapter.rooms.get(roomId) || new Set();
|
||||
|
||||
rooms[roomId].members = rooms[roomId].members.filter(member => {
|
||||
const stillConnected = connectedSockets.has(member.id);
|
||||
if (stillConnected) {
|
||||
validMembers.push(member);
|
||||
} else {
|
||||
console.log(`Removing disconnected user ${member.name} (${member.id}) from room ${roomId}`);
|
||||
}
|
||||
return stillConnected;
|
||||
});
|
||||
|
||||
return validMembers;
|
||||
}
|
||||
|
||||
module.exports.setCleanupGameState = setCleanupGameState;
|
Reference in New Issue
Block a user