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);
|
|
|
|
});
|
2022-05-03 12:25:54 +02:00
|
|
|
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;
|