wiki-server
Version:
A Federated Wiki Server
38 lines (37 loc) • 1.38 kB
JavaScript
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 })
})
})
}