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.
47 lines
1.8 KiB
JavaScript
47 lines
1.8 KiB
JavaScript
/**
|
|
* 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)`);
|
|
}
|
|
}
|