Simple peer и socket.io продолжает отправлять запросы туда и обратно 100 раз. Невозможно установить sh сигнальных соединений - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь установить sh соединение между двумя разными пользователями на сервере. Каждый раз, когда пользователь присоединяется к комнате, он получает информацию о socket.ids других пользователей в комнате. Что они пытаются сделать, так это то, что новый пользователь создает партнера-инициатора и отправляет сигнал. Что другой одноранговый узел принимает по какой-то причине, они оба продолжают посылать друг другу назад и вперед запросы, и никто не обращается друг к другу с запросами, вот что происходит. Изображение серверной консоли

createPeer = (userToSignal, callerId, stream) => {
    console.log('create peer called', userToSignal);
    const peer = new Peer({
        initiator: true,
        trickle: false,
        stream: stream
    })

    peer.on('signal', signal => {
        console.log('sending a signal to server')
        this.socket.emit('sending signal', {
            'userToSignal': userToSignal,
            'callerId': callerId,
            'signal': signal
        });
    });

    return peer;
}

addPeer = (incomingSignal, callerId, stream) => {
    console.log('Add peer called', callerId);
    const peer = new Peer({
        initiator: false,
        trickle: false,
        stream: stream
    });

    peer.signal(JSON.stringify(incomingSignal));

    peer.on('signal', signal =>{
        console.log('returning a signal to : ', callerId)
        this.socket.emit('returning signal', {
            'signal': signal,
            'callerId': callerId
        });
    });

    return peer;
}

joinCall = () => {
    navigator.mediaDevices.getUserMedia({ video: false, audio: true }).then(stream => {
        console.log(this.socket.id);
        this.socket.emit('join call', this.state.id, this.state.userName);
        console.log('Join Call Called')
        this.socket.on('all users', (usersInThisRoom) => {
            console.log('all users ', usersInThisRoom);
            const peers = [];
            usersInThisRoom.forEach(user => {
                console.log('for each called')
                const peer = this.createPeer(user['id'], this.socket.id, stream);
                peers.push({
                    'peerId' : user['id'],
                    'peer': peer 
                })
            });
            this.peersRefs = peers;
            this.setState({peersRefs : this.peersRefs});
        });

        this.socket.on('user joined', payload => {
            console.log('new user has joined', payload['callerId']);
            const peer = this.addPeer(payload['signal'], payload['callerId'], stream);
            this.peersRefs.push({
                'peerId': payload['callerId'],
                'peer': peer
            })
            this.setState({'peersRefs': this.peersRefs});
        });

        this.socket.on('receiving returned signal', payload => {
            console.log('returned signal recieved ', payload.id)
            const peerToSignal = this.peersRefs.find(peer => peer['peerId'] === payload.id)
            peerToSignal['peer'].signal(JSON.stringify(payload.signal));
        });
    });

    console.log('joining')     
}

Это мой код внешнего интерфейса ^^

// Changes start
socket.on('join call', (roomId, name) => {
    console.log('New User ', name)

    SessionModel.findById(roomId, (err, session, callback) => {
        if (err) throw err;
        let users = session.usersInCall;
        if (users.length === 10) {
            return;
        }
        let userObject = { 'id' : socket.id, 'name' : name};
        users.push(userObject);
        SessionModel.findOneAndUpdate({_id: roomId}, {usersInCall: users}, {
            new: true
        }, 
        (err) => {
            if (err) throw err
        });

        const usersInThisRoom = users.filter(user => {
            return user['id'] !== socket.id;
        });
        console.log(usersInThisRoom);
        socket.emit("all users", usersInThisRoom);

    })
})

socket.on('sending signal', payload => {
    console.log('Sending Signal',payload['userToSignal'] );

    io.to(payload['userToSignal']).emit('user joined', {
        'signal': payload['signal'],
        'callerId': payload['callerId']
    });
})

socket.on('returning signal', payload => {
    console.log('forwarding signal ',payload['callerId'])
    io.to(payload['callerId']).emit('receiving returned signal', {
        'signal' : payload['signal'],
        'id': socket.id
    });
})

Это мой код серверной части ^^^

...