Initial commit: fuesse.sexy — Where's the Feet
Wimmel-Suchspiel: finde 3 versteckte Fuesse in einer randvollen Szene. - Node/Express-Server generiert Szenen prozedural aus einer gemeinsamen Library (library/props = Deko, library/feet = Fuesse); Spezial-Level (emoji) unter scenes/ - Serverseitige Trefferpruefung (nicht per DOM austrickbar) - Frontend rendert die Szene als ein Bild -> fluessiges Zoom/Pan (panzoom) - Dark Mode, kein Start-Screen, Installationsskript + Deploy-Doku (Proxmox LXC) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
29
server/sceneStore.js
Normal file
29
server/sceneStore.js
Normal file
@@ -0,0 +1,29 @@
|
||||
// Haelt die Trefferzonen jeder generierten Szene serverseitig, damit Klicks
|
||||
// geprueft werden koennen, ohne die Zielpositionen je ans Frontend zu schicken.
|
||||
// Einfache Groessen- und Zeitbegrenzung verhindert ein Speicher-Leck bei vielen
|
||||
// Aufrufen.
|
||||
|
||||
const MAX_ENTRIES = 500;
|
||||
const TTL_MS = 1000 * 60 * 30; // 30 Minuten
|
||||
|
||||
const scenes = new Map(); // sceneId -> { targets, createdAt }
|
||||
|
||||
function evictIfNeeded() {
|
||||
const now = Date.now();
|
||||
for (const [id, entry] of scenes) {
|
||||
if (now - entry.createdAt > TTL_MS) scenes.delete(id);
|
||||
}
|
||||
while (scenes.size > MAX_ENTRIES) {
|
||||
const oldest = scenes.keys().next().value; // Map behaelt Einfuege-Reihenfolge
|
||||
scenes.delete(oldest);
|
||||
}
|
||||
}
|
||||
|
||||
export function saveScene(sceneId, targets) {
|
||||
scenes.set(sceneId, { targets, createdAt: Date.now() });
|
||||
evictIfNeeded();
|
||||
}
|
||||
|
||||
export function getScene(sceneId) {
|
||||
return scenes.get(sceneId) || null;
|
||||
}
|
||||
Reference in New Issue
Block a user