kannon/classes/Server.js
2022-04-14 14:23:41 +02:00

62 lines
No EOL
1.8 KiB
JavaScript

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;