kannon-client/classes/Audiostream.js

68 lines
No EOL
2 KiB
JavaScript

const net = require('net');
const Message = require('./Message');
class Audiostream {
constructor(data) {
this.host = config?.server?.host || "127.0.0.1";
this.port = data.port;
this.clientId = data.clientId;
this.size = data.size;
this.threshold = (this.size / 100) * 10;
this.#handleSocket(net.connect({
host: this.getHost(),
port: this.getPort()
}));
}
getHost() {
return this.host;
}
getPort() {
return this.port;
}
getTag() {
return this.getHost() + ':' + this.getPort();
}
#handleSocket(socket) {
socket.on('connect', () => {
logger.debug('connected to audio server \'' + this.getTag() + '\'...');
new Message('audiostream-ready', this.clientId).send(socket);
global.player.prepare(this.size, this.threshold);
});
socket.on('error', (error) => {
logger.error('error connecting to audio server \'' + this.getTag() + '\': ' + error);
});
socket.on('timeout', () => {
logger.warn('connection to audio server \'' + this.getTag() + '\' timed out');
});
socket.on('data', (data) => {
global.player.feed(data);
});
socket.on('end', () => {
logger.info('connection to audio server \'' + this.getTag() + '\' ended');
});
socket.on('close', () => {
logger.info('connection to audio server \'' + this.getTag() + '\' closed');
});
global.player.on('ready', () => {
global.player.play();
});
global.player.on('playing', async () => {
await new Promise((resolve, reject) => {
setTimeout(resolve, 10000);
});
global.player.pause();
await new Promise((resolve, reject) => {
setTimeout(resolve, 2000);
});
global.player.play();
});
}
}
module.exports = Audiostream;