Не могу понять, почему несколько пиров не работает в моем приложении webrtc - PullRequest
0 голосов
/ 02 февраля 2019

Не могу понять, почему, когда подключается третий пир, он выдает эту ошибку для третьего пира.Я думаю, что это может быть из-за того, что соединения перепутаны, так как, когда подключается 3-й узел, он получает два предложения одновременно, я не знаю, следует ли мне делать это как очередь или что-то в этом роде.Хотя я не уверен, что это проблема.Я собираюсь попробовать это сейчас, но дайте мне знать, если кто-нибудь может увидеть, что я делаю неправильно.Не удается прочитать свойство 'setRemoteDescription' из неопределенного

componentDidMount() {
    setUserMedia();
    this.socket.emit('createOrJoin', this.props.session);
    this.socket.on('signal', (data, remoteId) => {
        switch (data.type) {
            case 'newJoin':
            console.log('joined')
                this.createPeerRtcAndStream(remoteId, (rtc) => {
                    this.createOffer(rtc, (offer) => this.socket.emit('signal', offer));
                    this.remoteClients++;
                });
                break;
            case 'offer':
                this.remoteClients++;
                this.createPeerRtcAndStream(remoteId, (rtc) => {                
                        rtc.setRemoteDescription(new RTCSessionDescription(data), () => {
                            this.createAnswer(rtc, (answer) => this.socket.emit('signal', answer));
                        });                                 
                });
                break;
            case 'answer':          
                    this.rtcs[remoteId].setRemoteDescription(new RTCSessionDescription(data));
                break;
            case 'candidate':
                let hisCandidate = new RTCIceCandidate({
                    sdpMLineIndex: data.label,
                    candidate: data.candidate
                });
                if (this.rtcs[remoteId] !== undefined && this.rtcs[remoteId].remoteDescription.type) {
                    this.rtcs[remoteId].addIceCandidate(hisCandidate);
                }
                break;
            case 'clientLeft':
                this.handleLeavingClient(remoteId);
                break;
            default:
                this.socket.emit('signal', { type: 'failedConnection' });
        }
    });
}


console.log('CLIENT DESC', session);
        if(session.creatingSession===false){
            if(rooms[session.sessionKey]){
                reciever = socket.id;
                socket.join(session.sessionKey);
        rooms[session.sessionKey].clients.push(socket.id); 
                socket.in(session.sessionKey).emit('signal',{type:'newJoin'}, socket.id);
            }               
        } else {    
            if(!rooms[session.sessionKey]){
                socket.join(session.sessionKey);    
                msgs[session.sessionKey] = [];        
                rooms[session.sessionKey] = {};
                rooms[session.sessionKey].clients = [];
            }               
    rooms[session.sessionKey].name = session.room;
    rooms[session.sessionKey].clients.push(socket.id);
    console.log('CREATED SESSION');
            redClient.hset('rooms', session.sessionKey, JSON.stringify(session)) 
        }
        socket.on('signal', (data) => {
            switch (data.type){
                case 'offer':
                    console.log('initiator  recieved');
                    sender = socket.id
                    io.to(reciever).emit('signal', data, socket.id);    
                 break;
             case 'answer':
                 console.log('answer recieved');            
                 io.to(sender).emit('signal', data, socket.id); 
                 break;
             case 'candidate':
                 console.log('Recieved candidate'); 
                 sender = socket.id;     
                 if(socket.io==reciever){
                    io.to(sender).emit('signal', data, socket.id);  
                 } else {
                    io.to(reciever).emit('signal', data, socket.id);    
                 }               
                 break;
             case 'failedConnection':
                 console.log('FAILED CONNECTION')
             default :
                 console.log('NO CASE EXECUTED')    
            } 

     });
...