'use strict'; const onlineUsers = {}; module.exports = () => { return async (ctx, next) => { const { socket, app } = ctx; const { io } = app; const nsp = io.of('/'); onlineUsers[socket.handshake.query.id] = { userId: socket.handshake.query.id, }; setTimeout(() => { nsp.emit('onlineUsers', Object.keys(onlineUsers)); }, 1000); socket.on('disconnect', () => { delete onlineUsers[socket.handshake.query.id]; nsp.emit('onlineUsers', Object.keys(onlineUsers)); }); await next(); }; };