69 lines
No EOL
1.9 KiB
JavaScript
69 lines
No EOL
1.9 KiB
JavaScript
const Client = require('./Client.js');
|
|
const AudioServer = require('./AudioServer.js');
|
|
const net = require('net');
|
|
|
|
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 + '...');
|
|
resolve();
|
|
});
|
|
this.server.on('connection', (socket) => {
|
|
this.#addClient(socket);
|
|
});
|
|
this.server.on('error', (err) => {
|
|
logger.error('ERROR IN SERVER ' + err);
|
|
reject('an unexpected error occured: ' + err);
|
|
});
|
|
});
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = Server; |