corebasic 1.0.83 → 1.0.85

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 +17 -14
  2. package/package.json +1 -1
package/libs/messaging.js CHANGED
@@ -16,10 +16,15 @@ async function disconnect(user, uid) {
16
16
  if (!users_pool[user])
17
17
  return
18
18
 
19
+ let [{res}] = users_pool[user].reqres.filter(item => item.uid === uid).concat([{}])
20
+ res.end()
21
+
19
22
  if (users_pool[user].listeners[uid]) {
20
- await consumer.unsubscribe(user, users_pool[user].listeners[uid]);
23
+ if (users_pool[user].listeners.count == 1)
24
+ await consumer.unsubscribe(user, users_pool[user].listeners[uid]);
21
25
  users_pool[user].listeners.count --
22
26
  }
27
+ users_pool[user].reqres = users_pool[user].reqres.filter(item => item.uid !== uid)
23
28
  delete users_pool[user].listeners[uid]
24
29
  if (!users_pool[user].listeners.count)
25
30
  delete users_pool[user]
@@ -27,15 +32,19 @@ async function disconnect(user, uid) {
27
32
  // await consumer.unsubscribe(user);
28
33
  }
29
34
  async function connect({user,req,res, uid}) {
35
+ res.writeHead(200, {'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive'})
30
36
  const listener = (message, channel) => {
31
37
  if (users_pool[user]) {
32
38
  try {message = JSON.parse(message)} catch {}
33
- users_pool[user].res.write(JSON.stringify({message, channel}) + "\n")
39
+ for (let {req, res} of users_pool[user].reqres)
40
+ res.write(JSON.stringify({message, channel}) + "\n")
34
41
  }
35
42
  }
36
- users_pool[user] = users_pool[user] ?? {req,res,listeners: {count: 0}}
43
+ users_pool[user] = users_pool[user] ?? {reqres: [], listeners: {count: 0}}
44
+ users_pool[user].reqres.push({req, res, uid})
37
45
  users_pool[user].listeners[uid] = listener
38
- await consumer.subscribe(user, listener);
46
+ if (!users_pool[user].listeners.count)
47
+ await consumer.subscribe(user, listener);
39
48
  users_pool[user].listeners.count ++
40
49
  }
41
50
 
@@ -49,21 +58,15 @@ export async function start(app) {
49
58
  consumer.on('error', err => console.log('Redis Client Error', err));
50
59
 
51
60
  app.get('/messages/:user', async (req, res) => {
52
- let uid = Utils.uid()
61
+ let uid = req.body.client
53
62
  await connect({user: req.params.user, req, res, uid})
54
63
  req.on("close", async () => await disconnect(req.params.user, uid)) // request closed unexpectedly
55
64
  req.on("end", async () => await disconnect(req.params.user, uid)) // request ended normally
56
65
  })
57
66
  app.get('/messages/disconnects/:user', async (req, res) => {
58
- 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
- }
65
- userRes.end()
66
- }
67
+ let uid = req.body.client
68
+ if (users_pool[req.params.user])
69
+ await disconnect(req.params.user, uid)
67
70
  res.json({})
68
71
  })
69
72
  }
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.85",
5
5
  "description": "",
6
6
  "main": "index.js",
7
7
  "scripts": {