Backend: Match-Lobbys, Map-Veto, Echtzeit und CS2-Serveradapter

Express + Socket.IO + SQLite. Veto-Engine mit konfigurierbaren Map-Pools
und validierten Abläufen, rollenbasierte Berechtigungen, Server-Lebenszyklus
mit Demo-, Docker- und Static-Pool-Adapter (RCON), automatisches Herunterfahren.
This commit is contained in:
mregosar committed 2026-10-25 16:50:22 +01:00
commit f08297dd0d
27 files changed
+6355

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
/**
* Schnittstelle für die CS2-Serververwaltung.
*
* Jeder Adapter implementiert genau diese vier Operationen. Der ServerManager ruft sie auf;
* Routen und Frontend kennen nur den ServerManager.
*
* start({ matchId, mode, secrets })
* -> { handle, host, port, tvPort }
* Startet (oder reserviert) einen Server. handle ist ein beliebiges JSON-Objekt,
* das ausschließlich im Backend gespeichert wird (z. B. Containername, RCON-Ziel).
* secrets = { rconPassword, serverPassword, tvPassword } werden vom Manager erzeugt.
*
* status(handle)
* -> { state: 'starting' | 'running' | 'stopped' | 'failed', message?, playerCount?, map? }
*
* configure(handle, { map, beforeMapChange, afterMapChange, commands })
* -> void Wirft einen Fehler mit verständlicher Meldung, wenn die Konfiguration scheitert.
*
* stop(handle)
* -> void Darf mehrfach aufgerufen werden.
*
* Optional:
* sendCommands(handle, commands) -> string[] für Aktionen wie mp_warmup_end.
*
* Eigenschaften:
* name Kurzname des Adapters
* simulated true, wenn kein echter Server existiert. Das Frontend zeigt dann niemals
* "läuft" an, sondern kennzeichnet alles als Demo.
*/
import { DemoServerAdapter } from './demoAdapter.js';
import { DockerServerAdapter } from './dockerAdapter.js';
import { StaticPoolServerAdapter } from './staticPoolAdapter.js';
export function createServerAdapter(config, deps) {
switch (config.serverAdapter) {
case 'demo':
return new DemoServerAdapter(config.demo);
case 'docker':
return new DockerServerAdapter(config.docker, deps);
case 'static':
return new StaticPoolServerAdapter(config.staticPool, deps);
default:
throw new Error(`Unbekannter SERVER_ADAPTER "${config.serverAdapter}" (erlaubt: demo, docker, static)`);
}
}