peer-calls/src/client/peer/handshake.js
2017-06-17 13:22:40 -04:00

48 lines
1.3 KiB
JavaScript

import * as NotifyActions from '../actions/NotifyActions.js'
import _ from 'underscore'
import _debug from 'debug'
import peers from './peers.js'
import store from '../store.js'
const debug = _debug('peercalls')
const { dispatch } = store
export default function handshake ({ 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)
dispatch(
NotifyActions.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)
dispatch(
NotifyActions.info('Ready for connections')
)
socket.emit('ready', roomName)
}