-
Notifications
You must be signed in to change notification settings - Fork 0
/
SSEManager.js
96 lines (87 loc) · 2.78 KB
/
SSEManager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const SSEClient = require("./SSEClient");
class SSEManager {
constructor() {
/* On garde une liste de tous les clients connectés */
this.clients = new Map();
}
/**
* Initialise une nouvelle connexion avec un client
* @function open
* @param {number|string} clientId - L'identifiant du client
* @param {Object} context - La réponse HTTP
*/
open(clientId, context) {
const client = new SSEClient(context);
client.initialize();
this.clients.set(clientId, client);
}
/**
* Supprime un client
* @function delete
* @param {number|string} clientId - L'identifiant du client
*/
delete(clientId) {
this.clients.delete(clientId);
}
/**
* Supprime tous les clients
* @function deleteAll
*/
deleteAll() {
this.clients.clear();
}
/**
* Envoie un message à un seul client
* @function unicast
* @param {number|string} clientId - L'identifiant du client
* @params {Object} message - Le message à envoyer au client
* @params {number|string} [message.id] - L'identifiant unique du message
* @params {string} [message.type='message'] - Le type de message
* @params {number} [message.retry] - Le délai en millisecondes avant une tentative de reconnexion au serveur
* @params {string} message.data - Le contenu du message
*/
unicast(clientId, message) {
const client = this.clients.get(clientId);
if (client) {
client.send(message);
}
}
/**
* Envoie un message à tout les clients
* @function broadcast
* @params {Object} message - Le message à envoyer aux clients
* @params {number|string} [message.id] - L'identifiant unique du message
* @params {string} [message.type='message'] - Le type de message
* @params {number} [message.retry] - Le délai en millisecondes avant une tentative de reconnexion au serveur
* @params {string} message.data - Le contenu du message
*/
broadcast(message) {
for (const [id] of this.clients) {
this.unicast(id, message);
}
}
/**
* Envoie un message à une liste de client
* @function multicast
* @param {Array} clientIds - Les identifiants des clients
* @params {object} message - Le message à envoyer aux clients
* @params {number|string} [message.id] - L'identifiant unique du message
* @params {string} [message.type='message'] - Le type de message
* @params {number} [message.retry] - Le délai en millisecondes avant une tentative de reconnexion au serveur
* @params {string} message.data - Le contenu du message
*/
multicast(clientIds, message) {
for (const id of clientIds) {
this.unicast(id, message);
}
}
/**
* Retourne le nombre de clients connectés
* @function count
* @returns {number}
*/
count() {
return this.clients.size;
}
}
module.exports = SSEManager;