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) => { 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;