corebasic 1.0.83 → 1.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/libs/messaging.js +13 -11
  2. package/package.json +1 -1
package/libs/messaging.js CHANGED
@@ -17,9 +17,11 @@ async function disconnect(user, uid) {
17
17
  return
18
18
 
19
19
  if (users_pool[user].listeners[uid]) {
20
- await consumer.unsubscribe(user, users_pool[user].listeners[uid]);
20
+ if (users_pool[user].listeners.count == 1)
21
+ await consumer.unsubscribe(user, users_pool[user].listeners[uid]);
21
22
  users_pool[user].listeners.count --
22
23
  }
24
+ users_pool[user].reqres = users_pool[user].reqres.filter(item => item.uid !== uid)
23
25
  delete users_pool[user].listeners[uid]
24
26
  if (!users_pool[user].listeners.count)
25
27
  delete users_pool[user]
@@ -27,15 +29,19 @@ async function disconnect(user, uid) {
27
29
  // await consumer.unsubscribe(user);
28
30
  }
29
31
  async function connect({user,req,res, uid}) {
32
+ res.writeHead(200, {'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive'})
30
33
  const listener = (message, channel) => {
31
34
  if (users_pool[user]) {
32
35
  try {message = JSON.parse(message)} catch {}
33
- users_pool[user].res.write(JSON.stringify({message, channel}) + "\n")
36
+ for (let {req, res} of users_pool[user].reqres)
37
+ res.write(JSON.stringify({message, channel}) + "\n")
34
38
  }
35
39
  }
36
- users_pool[user] = users_pool[user] ?? {req,res,listeners: {count: 0}}
40
+ users_pool[user] = users_pool[user] ?? {reqres: [], listeners: {count: 0}}
41
+ users_pool[user].reqres.push({req, res, uid})
37
42
  users_pool[user].listeners[uid] = listener
38
- await consumer.subscribe(user, listener);
43
+ if (!users_pool[user].listeners.count)
44
+ await consumer.subscribe(user, listener);
39
45
  users_pool[user].listeners.count ++
40
46
  }
41
47
 
@@ -49,19 +55,15 @@ export async function start(app) {
49
55
  consumer.on('error', err => console.log('Redis Client Error', err));
50
56
 
51
57
  app.get('/messages/:user', async (req, res) => {
52
- let uid = Utils.uid()
58
+ let uid = req.body.client
53
59
  await connect({user: req.params.user, req, res, uid})
54
60
  req.on("close", async () => await disconnect(req.params.user, uid)) // request closed unexpectedly
55
61
  req.on("end", async () => await disconnect(req.params.user, uid)) // request ended normally
56
62
  })
57
63
  app.get('/messages/disconnects/:user', async (req, res) => {
64
+ let uid = req.body.client
58
65
  if (users_pool[req.params.user]) {
59
- let userRes = users_pool[req.params.user].res
60
- for (let uid in users_pool[req.params.user].listeners) {
61
- if (uid === "count")
62
- continue
63
- await disconnect(req.params.user, uid)
64
- }
66
+ await disconnect(req.params.user, uid)
65
67
  userRes.end()
66
68
  }
67
69
  res.json({})
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "corebasic",
3
3
  "type": "module",
4
- "version": "1.0.83",
4
+ "version": "1.0.84",
5
5
  "description": "",
6
6
  "main": "index.js",
7
7
  "scripts": {