CS2_DOCKER_HOSTS nimmt eine Liste von Docker-Hosts. Jedes Match läuft auf dem Host mit den meisten freien Ports und merkt sich seinen Host, damit Status, Konfiguration und Stopp dort landen. Ohne die Variable bleibt alles beim bisherigen einzelnen Host. deploy/docker-host-einrichten.sh richtet einen Host per SSH ein.
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 { DockerHostPool } 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 DockerHostPool(config.docker, deps);
|
|
case 'static':
|
|
return new StaticPoolServerAdapter(config.staticPool, deps);
|
|
default:
|
|
throw new Error(`Unbekannter SERVER_ADAPTER "${config.serverAdapter}" (erlaubt: demo, docker, static)`);
|
|
}
|
|
}
|