Example #1
0
        /// <summary>
        /// Initial Client Socket
        /// </summary>
        protected void SocketInitial()
        {
            _SocketClient.OnMessage += (s, e) =>
            {
                string        data    = e.Data;
                SocketMessage message = SocketMessage.MessageFac(data);

                switch (message.Command)
                {
                case SocketMessage.OfferSpd:
                    using (var go = new ManualResetEvent(false))
                    {
                        var t = Task.Factory.StartNew(() =>
                        {
                            var ok = _WebRtc.InitializePeerConnection();
                            if (ok)
                            {
                                go.Set();
                                while (_WebRtc.ProcessMessages(1000))
                                {
                                }
                                _WebRtc.ProcessMessages(1000);
                            }
                        }, _Cancel.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);

                        if (go.WaitOne(9999))
                        {
                            _WebRtc.OnOfferRequest(message.SDP);
                        }
                    }
                    break;

                case SocketMessage.OnSuccessAnswer:
                    SuccessAnswerMsg answerMsg = message as SuccessAnswerMsg;
                    _WebRtc.OnOfferReply(answerMsg.Type, answerMsg.SDP);
                    break;

                case SocketMessage.OnIceCandidate:
                    IceCandidateMsg iceMsg = message as IceCandidateMsg;
                    _WebRtc.AddIceCandidate(iceMsg.SdpMid, iceMsg.SdpMlineIndex, iceMsg.SDP);
                    break;
                }
            };
            _SocketClient.OnClose += (s, e) => _Cancel.Cancel();
            _SocketClient.OnError += (s, e) => _Cancel.Cancel();
        }