Server im LAN-Reiter des Steam-Serverbrowsers: LAN-Ports, Host-Netz, Teamnamen, CSTV +100
This commit is contained in:
1 parent
af58156209
commit
b5fa27fbd3
14 files changed
+269
-37
No files matched your search
@@ -22,6 +22,34 @@ function bool(name, fallback) {
|
||||
return ['1', 'true', 'yes', 'ja', 'on'].includes(raw.toLowerCase());
|
||||
}
|
||||
|
||||
/** Portliste aus Text wie "27015-27020" oder "27016,27018-27019". Leer = keine Ports. */
|
||||
export function parsePortList(value, label = 'LAN-Ports') {
|
||||
if (Array.isArray(value)) value = value.join(',');
|
||||
const ports = [];
|
||||
for (const part of String(value ?? '').split(',').map((p) => p.trim()).filter(Boolean)) {
|
||||
const m = /^(\d+)(?:\s*-\s*(\d+))?$/.exec(part);
|
||||
if (!m) throw new Error(`${label}: "${part}" ist kein Port oder Bereich`);
|
||||
const from = Number(m[1]);
|
||||
const to = Number(m[2] ?? m[1]);
|
||||
if (from < 1024 || to > 65535 || to < from || to - from > 100) throw new Error(`${label}: Bereich ${part} ist ungültig`);
|
||||
for (let p = from; p <= to; p += 1) if (!ports.includes(p)) ports.push(p);
|
||||
}
|
||||
return ports;
|
||||
}
|
||||
|
||||
/** Portliste kompakt als Text, z. B. [27015, 27016, 27017] -> "27015-27017". */
|
||||
export function formatPortList(ports = []) {
|
||||
const sorted = [...ports].sort((a, b) => a - b);
|
||||
const parts = [];
|
||||
for (let i = 0; i < sorted.length; i += 1) {
|
||||
let j = i;
|
||||
while (j + 1 < sorted.length && sorted[j + 1] === sorted[j] + 1) j += 1;
|
||||
parts.push(i === j ? String(sorted[i]) : `${sorted[i]}-${sorted[j]}`);
|
||||
i = j;
|
||||
}
|
||||
return parts.join(',');
|
||||
}
|
||||
|
||||
export function parseDockerHosts(raw) {
|
||||
if (!raw) return null;
|
||||
let list;
|
||||
@@ -44,6 +72,7 @@ export function parseDockerHosts(raw) {
|
||||
portRangeStart: h.portStart == null ? undefined : Number(h.portStart),
|
||||
portRangeEnd: h.portEnd == null ? undefined : Number(h.portEnd),
|
||||
volume: h.volume ?? undefined,
|
||||
lanPorts: h.lanPorts === undefined ? undefined : parsePortList(h.lanPorts, `LAN-Ports von ${h.name}`),
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -111,6 +140,13 @@ export function loadConfig(overrides = {}) {
|
||||
volume: str('CS2_DOCKER_VOLUME', 'cs2-mapveto-gamefiles'),
|
||||
extraArgs: str('CS2_DOCKER_EXTRA_ARGS'),
|
||||
startTimeoutMinutes: int('CS2_START_TIMEOUT_MINUTES', 20),
|
||||
// Spielports, die der Steam-Serverbrowser im LAN-Reiter absucht (Steam fragt nur 27015–27020 ab).
|
||||
// Diese Ports werden zuerst vergeben, CSTV kommt dann aus dem normalen Portbereich. Leer = aus.
|
||||
lanPorts: parsePortList(str('CS2_LAN_PORTS', '27015-27020'), 'CS2_LAN_PORTS'),
|
||||
// Abstand des CSTV-Ports zum Spielport, z. B. Spiel 27015 -> CSTV 27115
|
||||
tvPortOffset: int('CS2_TV_PORT_OFFSET', 100),
|
||||
// Anfang des Servernamens im Serverbrowser, danach folgen die Teamnamen
|
||||
serverNamePrefix: str('CS2_SERVERNAME_PREFIX', 'MaxLAN'),
|
||||
// Optional: mehrere Docker-Hosts als JSON-Liste, z. B.
|
||||
// [{"name":"host1","dockerHost":"ssh://cs2@192.168.178.111","publicHost":"192.168.178.111","portStart":27100,"portEnd":27139}]
|
||||
hosts: parseDockerHosts(str('CS2_DOCKER_HOSTS')),
|
||||
|
||||
Reference in new issue
Block a user