From 2a99927a13ef4dac38f3f5ecd9a94e6129a73ca9 Mon Sep 17 00:00:00 2001 From: velvettear Date: Wed, 20 Apr 2022 18:24:22 +0200 Subject: [PATCH] and some more changes --- classes/AudioServer.js | 155 ++++++++++++++++++++++++++--------------- 1 file changed, 100 insertions(+), 55 deletions(-) diff --git a/classes/AudioServer.js b/classes/AudioServer.js index a79b2d8..b2a451c 100644 --- a/classes/AudioServer.js +++ b/classes/AudioServer.js @@ -76,7 +76,26 @@ class AudioServer { client.audiosocket = socket; this.clients.push(client); logger.debug(client.getTag() + ' connected to audio server...'); - this.#sendData(client); + // this.#sendData(client, data); + // TEST ONLY + const timestamp = Date.now(); + const stream = fs.createReadStream(this.buffer.file); + stream.on('data', (data) => { + for (let index = 0; index < this.clients.length; index++) { + this.clients[index].audiosocket.write(data); + } + }); + stream.on('close', () => { + for (let index = 0; index < this.clients.length; index++) { + this.clients[index].audiosocket.end(); + } + logger.debug('buffering file \'' + this.buffer.file + '\' took ' + (Date.now() - timestamp) + 'ms (size: ' + stream.bytesRead + ' bytes)'); + }); + stream.on('error', (error) => { + logger.error('') + }); + + }); eventparser.on('audio:state', (data) => { this.#handleStateChange(data); @@ -151,61 +170,8 @@ class AudioServer { async #sendData(client) { const timestamp = Date.now(); - const buffer = await this.#bufferFile(); + // const buffer = await this.#bufferFile(); return new Promise(async (resolve, reject) => { - this.buffer.written = 0; - while (true) { - if (buffer[0] === undefined) { - await sleep(1); - continue; - } - const tmp = buffer[0]; - buffer.shift(); - if ((client.audiosocket.bytesWritten + tmp.length) >= this.buffer.size) { - logger.debug(client.getTag() + ' sent audio file \'' + this.buffer.file + '\' after ' + (Date.now() - timestamp) + 'ms...'); - client.audiosocket.end(tmp); - break; - } - client.audiosocket.write(tmp); - this.buffer.buffered -= tmp.length; - if (this.buffer.stream.isPaused() && this.buffer.buffered < this.buffer.limit) { - this.buffer.stream.resume(); - logger.debug('resuming read stream'); - } - } - client.audiosocket.on('error', (error) => { - logger.error(client.getTag() + ' encountered an error: ' + error); - }); - client.audiosocket.on('end', () => { - logger.debug(client.getTag() + ' ended audio socket'); - }); - client.audiosocket.on('close', (hadError) => { - let fn = resolve; - let msg = client.getTag() + ' closed audio socket'; - if (hadError === true) { - msg += ' after an error'; - fn = reject; - } - logger.debug(msg); - fn(msg); - }); - }); - } - - async #waitForBuffer() { - while (this.buffer.data === undefined || this.buffer.data.length < this.buffer.size) { - await sleep(1); - } - return this.buffer.data; - } - - async #bufferFile() { - // const stream = fs.createReadStream(this.buffer.file); - return new Promise((resolve, reject) => { - const timestamp = Date.now(); - const buffer = []; - let resolved = false; - this.buffer.buffered = 0; this.buffer.stream.on('data', (data) => { this.buffer.buffered += data.length; buffer.push(data); @@ -232,9 +198,88 @@ class AudioServer { // TODO: handle with try/catch reject(error); }); + // this.buffer.written = 0; + // while (true) { + // if (buffer[0] === undefined) { + // await sleep(1); + // continue; + // } + // const tmp = buffer[0]; + // buffer.shift(); + // if ((client.audiosocket.bytesWritten + tmp.length) >= this.buffer.size) { + // logger.debug(client.getTag() + ' sent audio file \'' + this.buffer.file + '\' after ' + (Date.now() - timestamp) + 'ms...'); + // client.audiosocket.end(tmp); + // break; + // } + // client.audiosocket.write(tmp); + // this.buffer.buffered -= tmp.length; + // if (this.buffer.stream.isPaused() && this.buffer.buffered < this.buffer.limit) { + // this.buffer.stream.resume(); + // logger.debug('resuming read stream'); + // } + // } + client.audiosocket.on('error', (error) => { + logger.error(client.getTag() + ' encountered an error: ' + error); + }); + client.audiosocket.on('end', () => { + logger.debug(client.getTag() + ' ended audio socket'); + }); + client.audiosocket.on('close', (hadError) => { + let fn = resolve; + let msg = client.getTag() + ' closed audio socket'; + if (hadError === true) { + msg += ' after an error'; + fn = reject; + } + logger.debug(msg); + fn(msg); + }); }); } + // async #waitForBuffer() { + // while (this.buffer.data === undefined || this.buffer.data.length < this.buffer.size) { + // await sleep(1); + // } + // return this.buffer.data; + // } + + // async #bufferFile() { + // // const stream = fs.createReadStream(this.buffer.file); + // return new Promise((resolve, reject) => { + // const timestamp = Date.now(); + // const buffer = []; + // let resolved = false; + // this.buffer.buffered = 0; + // this.buffer.stream.on('data', (data) => { + // this.buffer.buffered += data.length; + // buffer.push(data); + // if (resolved !== true && this.buffer.stream.bytesRead >= this.buffer.threshold) { + // resolved = true; + // logger.debug('buffering threshold of ' + this.buffer.threshold + ' bytes for file \'' + this.buffer.file + '\' took ' + (Date.now() - timestamp) + 'ms'); + // resolve(buffer); + // } + // if (this.buffer.buffered >= this.buffer.limit) { + // logger.debug('pausing read stream'); + // this.buffer.stream.pause(); + // if (resolved !== true) { + // resolved = true; + // resolve(buffer); + // } + // } + // }); + // this.buffer.stream.on('close', () => { + // // this.buffer.data = Buffer.concat(buffer); + // logger.debug('buffering file \'' + this.buffer.file + '\' took ' + (Date.now() - timestamp) + 'ms (size: ' + this.buffer.stream.bytesRead + ' bytes)'); + // // resolve(); + // }); + // this.buffer.stream.on('error', (error) => { + // // TODO: handle with try/catch + // reject(error); + // }); + // }); + // } + #getClientById(clientId) { if (clientId === undefined) { return;