Я готов построить видеочат с одним глазу на Socket.io & Simple-Peer, а для алгоритма один на один я использовал комнаты socket.io.но это не работает, поэтому я запутался.до этого у меня был алгоритм, который работал без комнат, но работал только для 2 человек, и если третий пытался подключиться, он получал сообщение «ожидание».в моем текущем алгоритме «имя» комнаты - это число.если в комнате только один пользователь, то он генерирует специальное событие, а когда второй подключается, «имя» комнаты увеличивается, а третий пользователь попадает в комнату «2» и .... вот мой код:
На стороне сервера:
vchns.on('connection', async function(socket){
try{
let room = vnumb;
socket.join(room);
socket.current_vroom = room
vchns.in(room).clients((err,clients)=>{
if(err) console.log(err);
if(clients.length < 2){
if(clients.length == 1){
socket.emit('CreatePeer')
}
}
if(clients.length >= 2){
++vnumb
}
})
socket.on('Offer', SendOffer);
socket.on('Answer', SendAnswer);
function SendOffer(offer){
socket.broadcast.in(socket.current_vroom).emit('BackOffer', offer);
}
function SendAnswer(data){
socket.broadcast.in(socket.current_vroom).emit('BackAnswer', data);
}
}catch(err){
console.log(err.message)
}
})
На стороне клиента:
let client = {}
navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(stream=>{
localVideo.srcObject = stream;
localVideo.play();
function initPeer(type){
let peer = new Peer({initiator: (type == 'init')? true : false, stream: stream, trickle: false});
peer.on('stream', (stream)=>{
CreateVideo(stream)
})
return peer;
}
function MakePeer(){
client.gotAnswer = false;
let peer = initPeer('init');
peer.on('signal', function(data){
if(!client.gotAnswer){
socket.emit('Offer', data)
}
})
client.peer = peer
}
function FrontAnswer(offer){
let peer = initPeer('notInit');
peer.on('signal', (data)=>{
socket.emit('Answer', data);
})
peer.signal(offer)
}
function SignalAnswer(answer){
client.gotAnswer = true;
let peer = client.peer;
peer.signal(answer)
}
function CreateVideo(stream){
let video = document.createElement('video');
video.id = 'remoteVideo';
video.srcObject = stream;
document.querySelector('#remoteVideoDiv').appendChild(video);
video.play()
}
socket.on('BackOffer', FrontAnswer)
socket.on('BackAnswer', SignalAnswer);
socket.on('CreatePeer', MakePeer)
})
.catch(err=>{
console.log(err.message)
})
что не так?
Спасибо!