module.exports = io => { io.on('connection', async socket => { console.log(`A socket connection to the server has been made: ${socket.id}`) socket.join('#chat', () => { sendAllRooms() sendAllUsers() }) socket.on('message', message => { console.log(`send a message to room ${message.room}: ${message}`) io.of(message.room).emit('message', message) }) socket.on('get all users', () => { console.log('get all users') sendAllUsers() }) socket.on('get my rooms', () => { console.log('get my rooms') sendAllRooms() }) socket.on('join', roomName => { console.log('join:', roomName) socket.join(roomName, () => { sendAllRooms() }) }) socket.on('part', () => { console.log('part') }) socket.on('get all rooms', () => sendAllRooms()) socket.on('send all clients', () => { // https://socket.io/docs/server-api/#namespace-clients-callback io.clients((error, clients) => { if (error) throw error console.log(clients) }) }) const sendAllRooms = () => { console.log('get all rooms') const allRooms = Object.keys(io.sockets.adapter.rooms) .filter(r => r[0] === '#') .map(k => ({ roomName: k, sockets: Object.keys(io.sockets.adapter.rooms[k]['sockets']), })) io.emit('got all rooms', allRooms) } const sendAllUsers = () => socket.emit('got all users', Object.keys(io.sockets.sockets)) socket.on('disconnect', async () => { io.emit('user disconnected', { socketId: socket.id }) console.log(`${socket.id} has disconnected.`) }) }) }