1
0
forked from notnull/ircz

added functionality for get all users, get all rooms, get my rooms

This commit is contained in:
notnull 2019-07-23 12:06:49 -04:00
parent 7b69c48048
commit 5782c339d5
2 changed files with 74 additions and 18 deletions

View File

@ -1,24 +1,52 @@
module.exports = io => { module.exports = io => {
io.on('connection', async socket => { io.on('connection', async socket => {
console.log(`A socket connection to the server has been made: ${socket.id}`) console.log(`A socket connection to the server has been made: ${socket.id}`)
socket.join('#chat') socket.join('#chat', () => {
io.emit( socket.emit('get my rooms', socket.rooms)
'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']),
}))
)
socket.broadcast.emit('user connected', { socketId: socket.id })
socket.on('message', message => { socket.on('message', message => {
io.to(message.room).emit(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 => { socket.on('join', payload => {
console.log(payload.room) console.log(payload.room)
socket.join({ room: payload.room }) socket.join({ room: payload.room }, () => {
socket.emit('got user rooms', Object.keys(socket.rooms))
})
}) })
socket.on('disconnect', async () => { socket.on('disconnect', async () => {
io.emit('user disconnected', { socketId: socket.id }) io.emit('user disconnected', { socketId: socket.id })
@ -33,7 +61,5 @@ module.exports = io => {
})) }))
) )
}) })
console.log(io.sockets.adapter.rooms['#chat'])
}) })
} }

View File

@ -1,7 +1,7 @@
import React from 'react' import React from 'react'
import socket from './socket' import socket from './socket'
import { Navbar, Nav, Dropdown } from 'react-bootstrap' import { Navbar, Nav, Dropdown, DropdownButton, Button } from 'react-bootstrap'
import uuid from 'uuid' import uuid from 'uuid'
import moment from 'moment' import moment from 'moment'
@ -9,7 +9,8 @@ const initialState = {
loading: true, loading: true,
messages: [], messages: [],
message: '', message: '',
rooms: [], allRooms: [],
myRooms: [],
room: '/', room: '/',
users: [], users: [],
user: {}, user: {},
@ -48,6 +49,11 @@ class App extends React.Component {
console.log(rooms) console.log(rooms)
this.setState({ rooms }) this.setState({ rooms })
}) })
this.socket.on('get user rooms', roomArray => {
const myRooms = roomArray.filter(roomString => roomString[0] === '#')
this.setState({ myRooms })
})
} }
handleChange(e) { handleChange(e) {
@ -106,7 +112,7 @@ class App extends React.Component {
</Dropdown.Toggle> </Dropdown.Toggle>
<Dropdown.Menu className="bg-dark"> <Dropdown.Menu className="bg-dark">
{this.state.rooms.map(r => ( {this.state.allRooms.map(r => (
<Dropdown.Item className="bg-dark text-light"> <Dropdown.Item className="bg-dark text-light">
{r.roomName} {r.roomName}
</Dropdown.Item> </Dropdown.Item>
@ -114,6 +120,30 @@ class App extends React.Component {
</Dropdown.Menu> </Dropdown.Menu>
</Dropdown> </Dropdown>
</Nav> </Nav>
<Button
variant="dark"
onClick={() => {
this.socket.emit('get all users')
}}
>
Get All Users
</Button>
<Button
variant="dark"
onClick={() => {
this.socket.emit('get all rooms')
}}
>
Get All Rooms
</Button>
<Button
variant="dark"
onClick={() => {
this.socket.emit('get my rooms')
}}
>
Get My Rooms
</Button>
</Navbar.Collapse> </Navbar.Collapse>
</Navbar> </Navbar>
@ -125,7 +155,7 @@ class App extends React.Component {
> >
<h5 className=" border-bottom pb-2">User Channels</h5> <h5 className=" border-bottom pb-2">User Channels</h5>
<p>this currently shows all channels</p> <p>this currently shows all channels</p>
{this.state.rooms.map(r => ( {this.state.myRooms.map(r => (
<button <button
key={r.roomName} key={r.roomName}
className="btn btn-dark d-flex" className="btn btn-dark d-flex"