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;