peer-calls/src/server/socket.ts

43 lines
1.0 KiB
TypeScript

'use strict'
import _debug from 'debug'
import map from 'lodash/map'
import { Socket, Server } from 'socket.io'
const debug = _debug('peercalls:socket')
type SocketWithRoom = Socket & { room?: string }
export default function handleSocket(socket: SocketWithRoom, io: Server) {
socket.on('signal', payload => {
// debug('signal: %s, payload: %o', socket.id, payload)
io.to(payload.userId).emit('signal', {
userId: socket.id,
signal: payload.signal,
})
})
socket.on('ready', roomName => {
debug('ready: %s, room: %s', socket.id, roomName)
if (socket.room) socket.leave(socket.room)
socket.room = roomName
socket.join(roomName)
socket.room = roomName
const users = getUsers(roomName)
debug('ready: %s, room: %s, users: %o', socket.id, roomName, users)
io.to(roomName).emit('users', {
initiator: socket.id,
users,
})
})
function getUsers (roomName: string) {
return map(io.sockets.adapter.rooms[roomName].sockets, (_, id) => {
return { id }
})
}
}