const net = require('net'); const Client = require('./Client.js'); const AudioServer = require('./AudioServer.js'); 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() { // setInterval(() => { // const audioServer = new AudioServer('/mnt/kingston/downloads/DOPESMOKER.flac'); // audioServer.start(); // }, 10000); 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 + '...'); }); 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)); const audioServer = new AudioServer('/mnt/kingston/downloads/DOPESMOKER.flac'); audioServer.start(); } removeClient(client) { client.destroy(); this.clients.splice(this.clients.indexOf(client), 1); } } module.exports = Server;