diff --git a/server/socket/index.js b/server/socket/index.js index ac0ec70..be8fb0a 100644 --- a/server/socket/index.js +++ b/server/socket/index.js @@ -4,6 +4,8 @@ module.exports = io => { socket.join('#chat', () => { sendAllRooms() sendAllUsers() + socket.emit('get my rooms', socket.rooms) + send_rooms() }) socket.on('message', message => { @@ -33,11 +35,12 @@ module.exports = io => { }) 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) + socket.on('join', payload => { + console.log(payload.room) + socket.join(payload.room, () => { + socket.emit('got user rooms', Object.keys(socket.rooms)) + send_rooms() + send_user_rooms() }) }) @@ -58,6 +61,29 @@ module.exports = io => { socket.on('disconnect', async () => { io.emit('user disconnected', { socketId: socket.id }) console.log(`${socket.id} has disconnected.`) + send_rooms() }) + io.emit('received users', Object.keys(io.sockets.sockets)) + + function send_rooms() { + 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']), + })) + ) + } + function send_user_rooms() { + socket.emit( + 'received my rooms', + Object.keys(socket.rooms).map(k => ({ + roomName: k, + sockets: socket.rooms[k]['socket'], + })) + ) + } }) } diff --git a/src/App.js b/src/App.js index e62b529..3c9699f 100644 --- a/src/App.js +++ b/src/App.js @@ -60,6 +60,17 @@ class App extends React.Component { const messages = this.state.messages.concat(msg) this.setState({ messages }) }) + this.socket.on('received my rooms', myRooms => { + console.log('my rooms', myRooms) + this.setState({ myRooms }) + }) + this.socket.on('received users', users => { + console.log(users) + this.setState({ users }) + }) + this.socket.on('join', room => { + console.log('joining', room) + }) } handleChange(e) { @@ -85,6 +96,17 @@ class App extends React.Component { text: this.state.message, room: this.state.room, } + if (message.text[0] === '/') { + // handle commands in separate function + const args = this.state.message.split(' ') + const cmd = args[0].slice(1, 5) + console.log('saw a command:', cmd) + if (cmd === 'join') { + const room = args[1] + console.log('user wants to join', room) + this.joinRoom(room) + } + } this.sendMessage(message) this.setState({ message: '' }) }