yekonga-server
Version:
Yekonga Server
103 lines (80 loc) • 3.66 kB
JavaScript
// @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);
});
});
}
}