64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
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.`)
|
|
})
|
|
})
|
|
}
|