kannon/classes/Message.js

53 lines
No EOL
1.3 KiB
JavaScript

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;