48 lines
1.1 KiB
JavaScript
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 };
|