forked from dejavueakay/orangebot
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathServerHandler.ts
36 lines (29 loc) · 949 Bytes
/
ServerHandler.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import Server from './Server';
import Logger from '../utils/logger';
export default class ServerHandler {
servers: { [ipAndPort: string]: Server } = {};
constructor() {
setInterval(this.tickCommandQueue, 100);
}
addServer = (server: Server) => {
this.servers[server.getIpAndPort()] = server;
};
addServers = (servers: Server[]) => {
servers.forEach(this.addServer);
};
removeServer = (server: Server) => {
//Todo: Prevent memory leaks
delete this.servers[server.getIpAndPort()];
};
getServerWithIpAndPort = (ipAndPort: string): Server | undefined => {
Logger.verbose('Getting server with ipAndPort:', ipAndPort);
return this.servers[ipAndPort];
};
tickCommandQueue = () => {
Object.values(this.servers)
.filter(server => server.commandQueue.length > 0)
.forEach(async server => {
await server.getRcon().execRconCommand(server.commandQueue.shift());
});
};
}