Пример #1
0
        private static void SecondSession()
        {
            Guid id = Guid.NewGuid();

            var session = WebRtcManager.AddSession(id.ToString());

            ManualResetEvent offerEvt = new ManualResetEvent(false);
            string           offer    = string.Empty;

            EventMessage += (s, ex) =>
            {
                if (ex.Msg.Source == id)
                {
                    return;
                }
                else if (ex.Msg.Sdp.Type == SdpTypes.Answer)
                {
                    session.Spitfire.SetOfferReply(ex.Msg.Sdp.Type.ToString().ToLower(), ex.Msg.Sdp.Sdp);
                }
            };
            session.OnIceCandidateFound += (s, ex) =>
            {
                EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, null, null, ex.IceCandidate)));
            };
            session.Spitfire.OnSuccessOffer += (ex) =>
            {
                offer = ex.Sdp;
                offerEvt.Set();
            };
            session.DataChannelOpened += (s, ex) =>
            {
                session.Spitfire.DataChannelSendText("default", "Hello World!!! Data channel is open");
            };
            session.Spitfire.CreateOffer();
            offerEvt.WaitOne();
            EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, offer)));
            offerEvt.Reset();
            offerEvt.WaitOne();
        }
Пример #2
0
        private static void SecondSession2()
        {
            Guid id = Guid.NewGuid();

            ManualResetEvent offerEvt = new ManualResetEvent(false);
            ManualResetEvent waitEvt  = new ManualResetEvent(false);

            string        offer   = string.Empty;
            WebRtcSession session = null;
            List <SpitfireIceCandidate> candidates = new List <SpitfireIceCandidate>();

            EventMessage += (s, ex) =>
            {
                if (ex.Msg.Source == id)
                {
                    return;
                }

                if (session == null && ex.Msg.IceCandidate != null)
                {
                    candidates.Add(ex.Msg.IceCandidate);
                }
                else if (session == null)
                {
                    offerEvt.Set();
                    offer = ex.Msg.Msg;
                }
                else if (ex.Msg.IceCandidate != null)
                {
                    if (!session.Spitfire.AddIceCandidate(ex.Msg.IceCandidate.SdpMid, ex.Msg.IceCandidate.SdpIndex, ex.Msg.IceCandidate.Sdp))
                    {
                        Console.WriteLine("Unable to add");
                    }
                }
            };
            offerEvt.WaitOne();

            session = WebRtcManager.AddSession(id.ToString(), offer);
            session.Spitfire.OnDataMessage += (s, ex) =>
            {
                Console.WriteLine("Meesage from peer:" + ex);
            };
            while (session.AnswerSdp == null)
            {
                Thread.Sleep(100);
            }
            EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, "Answer", session.AnswerSdp)));

            if (candidates.Count > 0)
            {
                foreach (var c in candidates)
                {
                    if (!session.Spitfire.AddIceCandidate(c.SdpMid, c.SdpIndex, c.Sdp))
                    {
                        Console.WriteLine("Unable to add");
                    }
                }
            }

            while (true)
            {
                if (waitEvt.WaitOne(100))
                {
                    break;
                }
            }
        }