コード例 #1
0
        IEnumerator SendAnswerCoroutine(string connectionId, PeerConnection pc)
        {
            pc.makingAnswer = true;

            var opLocalDesc = pc.peer.SetLocalDescription();

            yield return(opLocalDesc);

            if (opLocalDesc.IsError)
            {
                Debug.LogError($"{pc} {opLocalDesc.Error.message}");
                pc.makingAnswer = false;
                yield break;
            }

            Assert.AreEqual(pc.peer.LocalDescription.type, RTCSdpType.Answer, $"{pc} onmessage SLD worked");
            Assert.AreEqual(pc.peer.SignalingState, RTCSignalingState.Stable,
                            $"{pc} onmessage not racing with negotiationneeded");
            pc.makingAnswer = false;

            _signaling.SendAnswer(connectionId, pc.peer.LocalDescription);
        }
コード例 #2
0
        IEnumerator GotOfferCoroutine(string connectionId, PeerConnection pc, string sdp)
        {
            RTCSessionDescription description;

            description.type = RTCSdpType.Offer;
            description.sdp  = sdp;

            var isStable =
                pc.peer.SignalingState == RTCSignalingState.Stable ||
                (pc.peer.SignalingState == RTCSignalingState.HaveLocalOffer && pc.srdAnswerPending);

            pc.ignoreOffer = !pc.polite && (pc.makingOffer || !isStable);
            if (pc.ignoreOffer || pc.makingAnswer)
            {
                Debug.LogWarning($"{pc} glare - ignoreOffer {nameof(pc.peer.SignalingState)}:{pc.peer.SignalingState}");
                yield break;
            }

            // waiting other setRemoteDescription process
            yield return(new WaitWhile(() => pc.srdAnswerPending));

            pc.waitingAnswer = false;

            var opRemoteDesc = pc.peer.SetRemoteDescription(ref description);

            yield return(opRemoteDesc);

            if (opRemoteDesc.IsError)
            {
                Debug.LogError($"{pc} {opRemoteDesc.Error.message}");
                yield break;
            }

            Assert.AreEqual(pc.peer.RemoteDescription.type, RTCSdpType.Offer, $"{pc} SRD worked");
            Assert.AreEqual(pc.peer.SignalingState, RTCSignalingState.HaveRemoteOffer, $"{pc} Remote offer");

            onGotOffer?.Invoke(connectionId, sdp);
        }