Initial project structure
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
}));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user