ircz/server/socket/index.js
2019-07-23 20:05:05 +01:00

92 lines
2.4 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()
send_rooms()
send_user_rooms()
})
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()
send_user_rooms()
})
})
socket.on('part', () => {
console.log('part')
})
socket.on('get all rooms', () => sendAllRooms())
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()
})
})
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.`)
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() {
console.log(socket.rooms)
socket.emit(
'received my rooms',
Object.keys(io.sockets.adapter.rooms).map(k => ({
roomName: k,
sockets: io.sockets.adapter.rooms[k]['sockets'],
}))
)
}
})
}