43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
'use strict'
|
|
const _ = require('underscore')
|
|
const debug = require('debug')('peer-calls:peer')
|
|
const notify = require('../action/notify.js')
|
|
const peers = require('./peers.js')
|
|
|
|
function init (socket, roomName, stream) {
|
|
function createPeer (user, initiator) {
|
|
return peers.create({ socket, user, initiator, stream })
|
|
}
|
|
|
|
socket.on('signal', payload => {
|
|
let peer = peers.get(payload.userId)
|
|
let signal = payload.signal
|
|
// debug('socket signal, userId: %s, signal: %o', payload.userId, signal);
|
|
|
|
if (!peer) return debug('user: %s, no peer found', payload.userId)
|
|
peer.signal(signal)
|
|
})
|
|
|
|
socket.on('users', payload => {
|
|
let { initiator, users } = payload
|
|
debug('socket users: %o', users)
|
|
notify.info('Connected users: {0}', users.length)
|
|
|
|
users
|
|
.filter(user => !peers.get(user.id) && user.id !== socket.id)
|
|
.forEach(user => createPeer(user, initiator))
|
|
|
|
let newUsersMap = _.indexBy(users, 'id')
|
|
peers.getIds()
|
|
.filter(id => !newUsersMap[id])
|
|
.forEach(peers.destroy)
|
|
})
|
|
|
|
debug('socket.id: %s', socket.id)
|
|
debug('emit ready for room: %s', roomName)
|
|
notify.info('Ready for connections')
|
|
socket.emit('ready', roomName)
|
|
}
|
|
|
|
module.exports = { init }
|