Files

48 lines
1.1 KiB
JavaScript

const { customAlphabet } = require("nanoid");
const codeAlphabet = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
const makeCode = customAlphabet(codeAlphabet, 6);
const makeId = customAlphabet(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
21
);
const rooms = new Map();
function genCode() {
let c;
do {
c = makeCode();
} while (rooms.has(c));
return c;
}
function getRoom(code) {
return rooms.get(String(code || "").toUpperCase());
}
function setRoom(code, room) {
rooms.set(code.toUpperCase(), room);
}
function deleteRoom(code) {
rooms.delete(String(code || "").toUpperCase());
}
function allRooms() {
return rooms;
}
// Idle cleanup — drop rooms with no active sockets older than 60min
setInterval(() => {
const now = Date.now();
for (const [code, room] of rooms.entries()) {
const active = room.players.some((p) => p.connected);
if (!active && now - (room.lastActiveAt || 0) > 60 * 60 * 1000) {
rooms.delete(code);
}
}
}, 60 * 1000);
module.exports = { genCode, getRoom, setRoom, deleteRoom, allRooms, makeId };