wiki-server
Version:
A Federated Wiki Server
39 lines (38 loc) • 1.4 kB
JavaScript
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})
})
})
}
module.exports = {init}