-
Notifications
You must be signed in to change notification settings - Fork 0
/
gossip.js
56 lines (49 loc) · 1.04 KB
/
gossip.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
import { send } from './connect.js'
let wq = []
let tq = []
setInterval(() => {
tq = []
wq = []
}, 10000)
const sockets = new Set()
export const gossip = async (msg) => {
if (!tq.includes(msg)) {
if (send) {
send(msg)
tq.push(msg)
} else {
setTimeout(() => {
send(msg)
tq.push(msg)
}, 5000)
}
}
if (!wq.includes(msg)) {
console.log('Servering: ')
console.log(msg)
let mssg = ''
if (msg.length === 44 && !msg.startsWith('{')) {
console.log('its a hash')
mssg = msg
}
if (typeof msg === 'object') {
console.log('its an object')
mssg = await JSON.stringify(msg)
}
else {
console.log('its a blob')
mssg = msg
}
if (sockets.length) {
sockets.forEach(s => s.send(mssg))
wq.push(mssg)
} else {
setTimeout(() => {
sockets.forEach(s => s.send(mssg))
tq.push(mssg)
}, 5000)
}
}
}
export const addSocket = (s) => sockets.add(s)
export const rmSocket = (s) => sockets.delete(s)