47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
|
const { EVENT_DELIMITER } = require('../libs/constants.js');
|
||
|
|
||
|
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() + 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));
|
||
|
}
|
||
|
return await Promise.allSettled(promises);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
module.exports = Message;
|