kannon/classes/Server.js

68 lines
1.9 KiB
JavaScript
Raw Normal View History

2022-04-14 14:23:41 +02:00
const Client = require('./Client.js');
2022-04-22 15:58:04 +02:00
const net = require('net');
2022-04-14 14:23:41 +02:00
class Server {
constructor() {
this.listen = config?.server?.listen || '0.0.0.0';
this.port = config?.server?.port || 0;
this.clients = [];
this.server = net.createServer();
}
start() {
return new Promise((resolve, reject) => {
this.server.listen(this.port, this.listen).on('listening', () => {
this.port = this.server.address().port;
logger.info('communication server listening on ' + this.listen + ':' + this.port + '...');
2022-04-22 15:58:04 +02:00
resolve();
2022-04-14 14:23:41 +02:00
});
this.server.on('connection', (socket) => {
this.#addClient(socket);
});
this.server.on('error', (error) => {
logger.error('communication server encountered an error: ' + error);
// reject('an unexpected error occured: ' + error);
2022-04-14 14:23:41 +02:00
});
});
}
stop() {
if (this.server === undefined) {
return;
}
for (let index = 0; index < this.connections.length; index++) {
this.connections[index].destroy();
}
return new Promise((resolve, reject) => {
this.server.close();
this.server = undefined;
resolve();
});
}
#addClient(socket) {
this.clients.push(new Client(socket));
}
removeClient(client) {
client.destroy();
this.clients.splice(this.clients.indexOf(client), 1);
}
2022-04-19 15:34:10 +02:00
getClientById(clientId) {
if (clientId === undefined) {
return;
}
for (let index = 0; index < this.clients.length; index++) {
const client = this.clients[index];
if (client.id !== clientId) {
continue;
}
return client;
}
}
2022-04-14 14:23:41 +02:00
}
module.exports = Server;