Initial project structure

This commit is contained in:
2026-07-20 16:44:23 +02:00
commit c19fde4126
27 changed files with 4679 additions and 0 deletions
+352
View File
@@ -0,0 +1,352 @@
import { spawn, ChildProcess } from "child_process";
interface ServerProcess {
id:string;
name:string;
port:number;
queryPort:number;
process:ChildProcess;
started:number;
alive:boolean;
players:number;
maxPlayers:number;
}
export class ProcessManager {
private processes =
new Map<string, ServerProcess>();
startServer(data:any){
console.log(
"Starte Game Server:",
data.name
);
const args = [
`-Port=${data.port}`,
`-QueryPort=${data.queryPort}`,
`-ServerName=${data.name}`
];
const process = spawn(
"/home/heroes/HeroesOfValorServer.sh",
args,
{
cwd:"/home/heroes",
stdio:"pipe",
detached:true
}
);
process.stdout?.on(
"data",
data=>{
console.log(
`[${data.name}]`,
data.toString()
);
}
);
process.stderr?.on(
"data",
data=>{
console.error(
"SERVER ERROR:",
data.toString()
);
}
);
process.on("exit", code=>{
const server =
this.processes.get(data.serverId);
if(server){
console.log(
"Server beendet:",
server.name,
code
);
this.processes.delete(
data.serverId
);
}
});
this.processes.set(
data.serverId,
{
id:data.serverId,
name:data.name,
port:data.port,
queryPort:data.queryPort,
process,
started:Date.now(),
alive:true,
players:0,
maxPlayers:0
}
);
console.log(
"Server gestartet:",
{
id:data.serverId,
pid:process.pid
}
);
}
stopServer(id:string){
const server =
this.processes.get(id);
if(!server){
console.log(
"Server nicht gefunden:",
id
);
return;
}
console.log(
"Stoppe Server:",
server.name
);
process.kill(
-server.process.pid!,
"SIGTERM"
);
}
getServers(){
return Array.from(
this.processes.values()
);
}
getStatus(){
return Array.from(
this.processes.values()
).map(server => ({
id:
server.id,
name:
server.name,
port:
server.port,
queryPort:
server.queryPort,
pid:
server.process.pid,
alive:
server.alive,
players:
server.players,
maxPlayers:
server.maxPlayers,
started:
server.started
}));
}
}