forked from fedwiki/wiki-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathforward.js
More file actions
37 lines (37 loc) · 1.35 KB
/
forward.js
File metadata and controls
37 lines (37 loc) · 1.35 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
export const init = (app, emitter) => {
let sockets = []
app.io.on('connection', socket => {
let listeners = []
sockets.push(socket)
console.log('client connected:', socket.handshake.address)
socket.on('disconnect', reason => {
console.log('client disconnected:', socket.handshake.address, reason)
for (let { sProducer, listener } of listeners) {
console.log('removing listener:', sProducer)
emitter.removeListener(sProducer, listener)
}
listeners = []
let i = sockets.indexOf(socket)
sockets.splice(i, 1)
})
socket.on('unsubscribe', sProducer => {
console.log('unsubscribing listener:', socket.handshake.address, sProducer)
for (let [i, { slugItem, listener }] of listeners.entries()) {
if (slugItem == sProducer) {
console.log('removing listener:', sProducer)
emitter.removeListener(sProducer, listener)
listeners.splice(i, 1)
}
}
})
socket.on('subscribe', sProducer => {
let listener = result => {
console.log('forwarding:', socket.handshake.address, result)
socket.emit(sProducer, { slugItem: sProducer, result })
}
console.log(`registering listener:`, socket.handshake.address, sProducer)
emitter.on(sProducer, listener)
listeners.push({ sProducer, listener })
})
})
}