module.exports = io => { io.on('connection', async socket => { console.log(`A socket connection to the server has been made: ${socket.id}`) socket.join('#chat', () => { socket.emit('get my rooms', socket.rooms) }) socket.on('message', message => { io.to(message.room).emit(message) }) socket.on('get all users', () => { console.log('get all users') console.log(Object.keys(io.sockets.sockets)) }) socket.on('get all rooms', () => { console.log('get all rooms') console.log( Object.keys(io.sockets.adapter.rooms) .filter(r => r[0] === '#') .map(k => ({ roomName: k, sockets: Object.keys(io.sockets.adapter.rooms[k]['sockets']), })) ) }) socket.on('get my rooms', () => { console.log('get my rooms') console.log(Object.keys(socket.rooms)) }) socket.on('join a room', roomName => { console.log('join a room') socket.join(roomName, () => { socket.emit('get my rooms') }) }) socket.on('leave a room', () => { console.log('leave a room') }) socket.on('join', payload => { console.log(payload.room) socket.join({ room: payload.room }, () => { socket.emit('got user rooms', Object.keys(socket.rooms)) }) }) socket.on('disconnect', async () => { io.emit('user disconnected', { socketId: socket.id }) console.log(`${socket.id} has disconnected.`) io.emit( 'received rooms', Object.keys(io.sockets.adapter.rooms) .filter(r => r[0] === '#') .map(k => ({ roomName: k, sockets: Object.keys(io.sockets.adapter.rooms[k]['sockets']), })) ) }) }) }