В моем javascript файле есть два метода, которые содержат другой метод с тем же именем, и когда эта функция вызывается, работает смущенно - PullRequest
0 голосов
/ 08 апреля 2020
const video = document.querySelector('video');
let client = {};
var stream;


navigator.mediaDevices.getUserMedia({ video: true, audio: true }, function (stream) {
    stream = stream;
}, function () { })
    .then(stream => {
        connection.invoke('NewVideoClient');
        video.srcObject = stream
        video.play();


        function InitPeer(type) {
            var peer = new SimplePeer({
                initiator: (type == 'init') ? true : false,
                stream: stream,
                trickle: false
            });

            peer.on('stream', function (stream) {
                CreateVideo(stream);
            });

            peer.on('connect', () => {
                console.log('CONNECT');
                alert('CONNECT');
            });

            //peer.on('close', function () {
            //    document.getElementById('peerVideo').remove();
            //    peer.destroy();

            //});
            return peer;
        }


        // for peer type init
        function CreatePeer() {
            alert("Enter in to CreatePeer");
            client.gotAnswer = false;
            let peer = InitPeer('init');
           // let data = null;
            peer.on('signal', function (data) {
                if (!client.gotAnswer) {
                    connection.invoke('SendOffer', data);
                    alert(JSON.stringify(data));
                }

            });
            client.peer = peer;

        }

        //peer not init to pass the answer
        function CreateAnswer(offer) {
            let peer = InitPeer('notInit');
            let data = null;
            peer.on('signal', (offer) => {
                alert("Enter in to CreateAnswer");
                connection.invoke('SendAnswer', offer);
            });
            peer.signal(offer);
        }

        //this fuction will run when answer send from server
        function SignalAnswer(answer) {
            alert("Enter in to Signaling");
            client.gotAnswer = true;
            let peer = client.peer;
            peer.signal(answer);

        };

        //this function will create video
        function CreateVideo(stream) {
            alert("video play");
            let video = document.createElement('video');
            video.id = 'peerVideo';
            video.style.width = '400px';
            video.style.height = '400px';
            video.srcObject = stream;
            video.class = 'embed-responsive-item';
            document.querySelector("#peerDiv").appendChild(video);
            video.play();
        }


        function SessionActive() {
            document.write("User is in another call.Please come back");
        }

        //Hub will call this function to create the offer
        connection.on("CreateOffer", function () {
            alert("Enter in to CreateOffer");
            CreatePeer();
        });

        //Hub will call this method to create the answer
        connection.on("CreateAnswer", function (offer) {
            alert("Enter in to CreateAnswer");
            CreateAnswer(offer);
        });


        //Hub will call this fucntion to send the answer ot the caller
        connection.on("SignalAnswer", function (answer) {
            alert("Enter in to Signaling");
            SignalAnswer(answer);

        })

        //Hub will call this fuction to this connect the video 
        connection.on("RemovePeer", function () {

            document.getElementById('peerVideo').remove();
            if (client.peer) {
                client.peer.destroy();
            }
        });
    })
    .catch(err => document.write(err));

Я написал 3 метода в своем приложении для видеочата, поскольку я новичок в javascript, возникает небольшая путаница. В методе "SignalAnswer" он вызывает "peer.signal (answer)", и это вызывает функцию сигнала внутри "CreatePeer". Внутри метода «CreateAnswer» также есть созданная сигнальная функция, но она не вызывается. он будет вызван peer.signal (offer) в том же методе. Я предполагаю, потому что peer получит два разных объекта в два разных времени. Таким образом, в соответствии с назначенным объектом эта функция будет вызываться. Может ли кто-нибудь объяснить это. как эти функции работают в javascripts ПРИМЕЧАНИЕ. Соединение используется для вызова хаба SingnalR.

...