378 lines
4.0 KiB
TypeScript
378 lines
4.0 KiB
TypeScript
export interface ServerInfo {
|
|
|
|
|
|
id:string;
|
|
|
|
name:string;
|
|
|
|
wrapperId:string;
|
|
|
|
|
|
status:
|
|
| "STARTING"
|
|
| "RUNNING"
|
|
| "STOPPING"
|
|
| "CRASHED";
|
|
|
|
|
|
port:number;
|
|
|
|
queryPort:number;
|
|
|
|
|
|
pid?:number;
|
|
|
|
|
|
players:number;
|
|
|
|
|
|
maxPlayers:number;
|
|
|
|
|
|
emptySince?:number;
|
|
|
|
|
|
created:number;
|
|
|
|
|
|
lastSeen:number;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export class ServerRegistry {
|
|
|
|
|
|
|
|
private servers =
|
|
new Map<string, ServerInfo>();
|
|
|
|
|
|
|
|
|
|
|
|
add(server:ServerInfo){
|
|
|
|
|
|
this.servers.set(
|
|
|
|
server.id,
|
|
|
|
server
|
|
|
|
);
|
|
|
|
|
|
console.log(
|
|
"Server registriert:",
|
|
server
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
get(id:string){
|
|
|
|
|
|
return this.servers.get(
|
|
id
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getAll(){
|
|
|
|
|
|
return Array.from(
|
|
|
|
this.servers.values()
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
update(server:ServerInfo){
|
|
|
|
|
|
this.servers.set(
|
|
|
|
server.id,
|
|
|
|
server
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remove(id:string){
|
|
|
|
|
|
this.servers.delete(
|
|
id
|
|
);
|
|
|
|
|
|
console.log(
|
|
"Server entfernt:",
|
|
id
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list(){
|
|
|
|
|
|
console.log(
|
|
"\n=== SERVER ÜBERSICHT ==="
|
|
);
|
|
|
|
|
|
|
|
const servers =
|
|
this.getAll();
|
|
|
|
|
|
|
|
|
|
if(servers.length === 0){
|
|
|
|
|
|
console.log(
|
|
"Keine Server vorhanden"
|
|
);
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(const server of servers){
|
|
|
|
|
|
console.log({
|
|
|
|
|
|
id:
|
|
server.id,
|
|
|
|
|
|
name:
|
|
server.name,
|
|
|
|
|
|
wrapper:
|
|
server.wrapperId,
|
|
|
|
|
|
status:
|
|
server.status,
|
|
|
|
|
|
port:
|
|
server.port,
|
|
|
|
|
|
queryPort:
|
|
server.queryPort,
|
|
|
|
|
|
players:
|
|
`${server.players}/${server.maxPlayers}`
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
syncWrapperStatus(data:any){
|
|
|
|
if(!data.servers)
|
|
return;
|
|
|
|
|
|
|
|
const runningServerIds =
|
|
new Set(
|
|
data.servers.map(
|
|
(srv:any)=>srv.id
|
|
)
|
|
);
|
|
|
|
|
|
|
|
for(const server of this.servers.values()){
|
|
|
|
|
|
if(
|
|
server.wrapperId === data.wrapperId &&
|
|
!runningServerIds.has(server.id)
|
|
){
|
|
|
|
|
|
if(server.status === "STOPPING"){
|
|
|
|
|
|
console.log(
|
|
"Server sauber beendet:",
|
|
server.name
|
|
);
|
|
|
|
|
|
this.remove(
|
|
server.id
|
|
);
|
|
|
|
|
|
}
|
|
else if(server.status === "RUNNING"){
|
|
|
|
|
|
server.status =
|
|
"CRASHED";
|
|
|
|
|
|
this.servers.set(
|
|
server.id,
|
|
server
|
|
);
|
|
|
|
|
|
console.log(
|
|
"Server abgestürzt:",
|
|
server.name
|
|
);
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(const srv of data.servers){
|
|
const server =
|
|
this.servers.get(
|
|
srv.id
|
|
);
|
|
|
|
|
|
if(!server)
|
|
continue;
|
|
|
|
|
|
|
|
server.pid =
|
|
srv.pid;
|
|
|
|
server.players =
|
|
srv.players ?? 0;
|
|
|
|
|
|
server.maxPlayers =
|
|
srv.maxPlayers ?? 0;
|
|
|
|
|
|
server.lastSeen =
|
|
Date.now();
|
|
|
|
|
|
|
|
const oldStatus =
|
|
server.status;
|
|
|
|
|
|
|
|
if(srv.alive){
|
|
|
|
server.status =
|
|
"RUNNING";
|
|
|
|
}
|
|
else if(
|
|
server.status === "RUNNING"
|
|
){
|
|
|
|
server.status =
|
|
"CRASHED";
|
|
|
|
}
|
|
|
|
|
|
|
|
if(oldStatus !== server.status){
|
|
|
|
console.log(
|
|
"Status Änderung:",
|
|
server.name,
|
|
oldStatus,
|
|
"->",
|
|
server.status
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
this.servers.set(
|
|
server.id,
|
|
server
|
|
);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
} |