-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsseChannel.js
More file actions
65 lines (59 loc) · 1.39 KB
/
Copy pathsseChannel.js
File metadata and controls
65 lines (59 loc) · 1.39 KB
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
function sseChannel() {
const connectedClients = {};
let count = 0;
const pvConnect = (pRes) => {
pRes.writeHead(200, {
Connection: "keep-alive",
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
});
count++;
pRes.sseId = count;
connectedClients[pRes.sseId] = pRes;
};
const pvDisconnect = (pSSEId) => {
delete connectedClients[pSSEId];
};
this.count = () => {
return Object.keys(connectedClients).length;
};
this.broadcast = (pData) => {
if (!pData) {
return;
}
try {
// throw new Error("Broadcast error");
for (const xRes in connectedClients) {
const xClient = connectedClients[xRes];
xClient.write(`data: ${JSON.stringify(pData)}`);
xClient.write("\n\n");
}
} catch (err) {
console.log(`Broadcast console log ${err}`);
}
};
this.close = () => {
for (const xRes in connectedClients) {
const xClient = connectedClients[xRes];
xClient.end();
}
};
this.middleWare = () => {
return [
(req, res, next) => {
//Cria a conexão
pvConnect(res);
req.on("close", () => {
//Fecha a conexão
pvDisconnect(res.sseId);
});
next();
},
(err, req, res, next) => {
console.log(`Tratado ${err}`);
next();
},
];
};
}
module.exports = sseChannel;