class Message { constructor(id, data) { this.id = id; this.data = data; } getId() { return this.id; } getData() { return this.data; } toString() { return JSON.stringify(this); } async send(client, addClientId) { if (client === undefined) { return this.broadcast(); } if (addClientId) { this.data.clientId = client.id; } const data = this.toString(); logger.debug(client.getTag() + ' sending data: ' + data); await new Promise((resolve, reject) => { client.socket.write(this.toString() + constants.EVENT_DELIMITER, resolve); }); return client.id; } async broadcast(addClientId) { const promises = []; for (let index = 0; index < server.clients.length; index++) { promises.push(this.send(server.clients[index], addClientId)); } const reached = []; const result = await Promise.allSettled(promises); for (let index = 0; index < result.length; index++) { if (result[index]?.status !== 'fulfilled') { continue; } reached.push(result[index].value); } return reached; } } module.exports = Message;