UNPKG

yekonga-server

Version:
103 lines (80 loc) 3.66 kB
// @ts-nocheck module.exports = (socketServer, options) => { var localOptions = { debug: true } new PeerConnection(socketServer, options); } class PeerConnection { constructor(socket, options) { options = options || {}; this.path = '/peer'; this._peerDevices = {} this._peerRooms = {} this._socket = socket.of(this.path); this.initializeSocket(); } initializeSocket() { this._socket.on('connection', (socket) => { // console.warn(`connected: /peer`); // socket.on("open", (data) => { // data = data || {} // var peerId = (data.peerId)? data.peerId: Yekonga.Helper.uuid4('peerId'); // socket.join(peerId); // console.debug(`open: ${peerId}`); // socket.emit('open', { peerId, type: "general" }) // }) socket.on('join', ({roomId, userId, peerId, profile }) => { peerId = (peerId)? peerId: Yekonga.Helper.uuid4('peerId'); if(!socket.data) socket.data = {} console.debug(`join: ${peerId}`); socket.data.userId = userId; socket.data.roomId = roomId; socket.data.peerId = peerId; socket.data.profile = profile; socket.join(roomId); socket.emit('open', { peerId, type: "general" }); if (!this._peerDevices[peerId]) { socket.broadcast.to(roomId).emit('request', { roomId, userId, peerId, profile }) } else { socket.broadcast.to(roomId).emit('session-active', { roomId, userId, peerId, profile }) } this._peerDevices[peerId] = { roomId }; }); socket.on('offer', ({roomId, userId, peerId, offer, profile, to}) => { this._peerDevices[peerId]['offer'] = offer; socket.broadcast.to(roomId).emit(`offer-${to}`, {roomId, userId, peerId, offer, profile}) }) socket.on('answer', ({roomId, userId, peerId, answer, profile, to}) => { this._peerDevices[peerId]['answer'] = answer; socket.broadcast.to(roomId).emit(`answer-${to}`, {roomId, userId, peerId, answer, profile}) }) socket.on('leave', (data) => { var { roomId, peerId, userId } = data || {} this._peerDevices[peerId] = undefined; socket.broadcast.to(roomId).emit('leave', {userId, peerId}) }); socket.on('disconnect', () => { if(!socket.data) socket.data = {} const roomId = socket.data.roomId; const userId = socket.data.userId; const peerId = socket.data.peerId; const devices = Object.keys(this._peerDevices).length; if (devices > 0) { if (devices <= 2) { socket.broadcast.emit("leave", {userId, peerId, roomId}) } this._peerDevices[peerId] = undefined; } console.debug(`${this.path} (${roomId}) => disconnect`); if(roomId) { socket.leave(roomId); socket.broadcast.to(roomId).emit('leave', {userId, peerId, roomId}); } }) socket.on('error', function (e) { console.debug('socket.io error:' + e); }); }); } }