コード例 #1
0
        private bool HTTPGetAnswers()
        {
            HttpWebRequest request =
                (HttpWebRequest)WebRequest.Create($"{m_url}/signaling/answer?fromtime={m_lastTimeGetAnswerRequest}");

            request.Method      = "GET";
            request.ContentType = "application/json";
            request.Headers.Add("Session-Id", m_sessionId);
            request.KeepAlive = false;

            HttpWebResponse   response = HTTPGetResponse(request);
            AnswerResDataList list     = HTTPParseJsonResponse <AnswerResDataList>(response);

            if (list == null)
            {
                return(false);
            }

            m_lastTimeGetAnswerRequest = DateTimeExtension.ParseHttpDate(response.Headers[HttpResponseHeader.Date])
                                         .ToJsMilliseconds();

            foreach (var answer in list.answers)
            {
                m_mainThreadContext.Post(d => OnAnswer?.Invoke(this, answer), null);
            }

            return(true);
        }
コード例 #2
0
    private void ProcessMessage(AntMediaSignalingMessage msg)
    {
        switch (msg.command)
        {
        case "start":
            OnStart.Invoke(msg.streamId);
            break;

        case "takeConfiguration":
            if (msg.type == "offer")
            {
                OnOffer.Invoke(msg);
            }
            else if (msg.type == "answer")
            {
                OnAnswer.Invoke(msg);
            }
            break;

        case "takeCandidate":
            OnIceCandidate.Invoke(msg);
            break;

        case "error":
            OnSignalingError.Invoke(msg.definition);
            break;
        }
    }
コード例 #3
0
    /*
     * It's button func on AnswerButton
     */
    public void OnAnswerClicked(int choice)
    {
        audioM.Click();

        var isLast    = currentQuestionNum == PoolSize - 1;
        var isCorrect = currentQuestion.answers[choice] == pool.answers[currentQuestionNum];

        p.AddAnsweredQuestion(currentQuestion.id, isCorrect);

        if (isCorrect && isLast)
        {
            PlayerWin();
        }
        else if (!isCorrect && lives == 0)
        {
            PlayerLose();
        }

        OnAnswer?.Invoke(this, new AnswerArgs
        {
            correct       = isCorrect,
            choice        = choice,
            qNum          = currentQuestionNum,
            correctChoice = GetCorrectChoice()
        });
    }
コード例 #4
0
ファイル: Request.cs プロジェクト: xBlazeK1ng420x/SideKik
 public void Answer(XmlReader reader)
 {
     State = RequestState.Answered;
     if (reader.GetAttribute("type") != "error")
     {
         OnAnswer?.Invoke(reader);
     }
     else
     {
         OnError?.Invoke(reader);
     }
 }
コード例 #5
0
ファイル: Client.cs プロジェクト: ZimnitskiYury/epam_gstu
        /// <summary>
        /// REceive message from server
        /// </summary>
        /// <returns>Return message - string</returns>
        public string Receive()
        {
            OnAnswer += clientHandler.Transliteration;
            var tcpEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            var tcpSocket   = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var taken       = new byte[256];
            var size        = 0;
            var answer      = new StringBuilder();

            do
            {
                size = tcpSocket.Receive(taken);
                answer.Append(Encoding.UTF8.GetString(taken, 0, size));
            }while (tcpSocket.Available > 0);
            OnAnswer?.Invoke(answer.ToString());
            tcpSocket.Shutdown(SocketShutdown.Both);
            tcpSocket.Close();
            return(answer.ToString());
        }
コード例 #6
0
        private void OnAnswerpress(char press)
        {
            if (AnswerButtonsEnabled)
            {
                AnswerButtonsEnabled = false;

                switch (press)
                {
                case 'A':
                    buttonA.BackgroundImage = Properties.Resources.TryA;
                    buttonA.Refresh();
                    AnswerIndex = 1;
                    break;

                case 'B':
                    buttonB.BackgroundImage = Properties.Resources.TryB;
                    buttonB.Refresh();
                    AnswerIndex = 2;
                    break;

                case 'C':
                    buttonC.BackgroundImage = Properties.Resources.TryC;
                    buttonC.Refresh();
                    AnswerIndex = 3;
                    break;

                case 'D':
                    buttonD.BackgroundImage = Properties.Resources.TryD;
                    buttonD.Refresh();
                    AnswerIndex = 4;

                    break;
                }
                if (File.Exists(@"sound\gong.wav"))
                {
                    new System.Media.SoundPlayer(@"sound\gong.wav").Play();
                }
                Thread.Sleep(3000);
                OnAnswer?.Invoke(this, EventArgs.Empty);
            }
        }
コード例 #7
0
        public IEnumerator AskQuestion(QuestionSpec questionSpec)
        {
            _speechRecognizer.Setup(questionSpec.CorrectAnswers);
            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.Intro]));

            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion]));

            yield return(_speechRecognizer.Recognize(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion].Text,
                                                     _questionsSpec.GeneralQuestionsSpec.AnswerListeningDuration));

            if (_speechRecognizer.IsCorrectAnswer())
            {
                OnAnswer?.Invoke(_statisticsInfo
                                 .AddTimeBeforeAnswer(_speechRecognizer.TimeBeforeAnswer)
                                 .AddCorrectAnswerAttempt(1));
                yield return(OnCorrectAnswer(questionSpec));

                yield break;
            }

            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.SupportQuestion]));

            yield return(_speechRecognizer.Recognize(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion].Text,
                                                     _questionsSpec.GeneralQuestionsSpec.AnswerListeningDuration));

            if (_speechRecognizer.IsCorrectAnswer())
            {
                OnAnswer?.Invoke(_statisticsInfo
                                 .AddTimeBeforeAnswer(_speechRecognizer.TimeBeforeAnswer)
                                 .AddCorrectAnswerAttempt(2));
                yield return(OnCorrectAnswer(questionSpec));

                yield break;
            }

            OnAnswer?.Invoke(_statisticsInfo);
            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.RepeatOnIncorrect]));
        }
コード例 #8
0
        private void WSProcessMessage(object sender, MessageEventArgs e)
        {
            var content = Encoding.UTF8.GetString(e.RawData);

            Debug.Log($"Signaling: Receiving message: {content}");

            try
            {
                var routedMessage = JsonUtility.FromJson <RoutedMessage <SignalingMessage> >(content);

                SignalingMessage msg;
                if (!string.IsNullOrEmpty(routedMessage.type))
                {
                    msg = routedMessage.data;
                }
                else
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                }

                if (!string.IsNullOrEmpty(routedMessage.type))
                {
                    if (routedMessage.type == "connect")
                    {
                        string connectionId = JsonUtility.FromJson <SignalingMessage>(content).connectionId;
                        OnCreateConnection?.Invoke(this, connectionId);
                    }
                    else if (routedMessage.type == "offer")
                    {
                        if (!string.IsNullOrEmpty(routedMessage.from))
                        {
                            DescData offer = new DescData();
                            offer.connectionId = routedMessage.from;
                            offer.sdp          = msg.sdp;

                            OnOffer?.Invoke(this, offer);
                        }
                        else
                        {
                            Debug.LogError("Signaling: Received message from unknown peer");
                        }
                    }
                    else if (routedMessage.type == "answer")
                    {
                        if (!string.IsNullOrEmpty(routedMessage.from))
                        {
                            DescData answer = new DescData
                            {
                                connectionId = routedMessage.from,
                                sdp          = msg.sdp
                            };
                            OnAnswer?.Invoke(this, answer);
                        }
                        else
                        {
                            Debug.LogError("Signaling: Received message from unknown peer");
                        }
                    }
                    else if (routedMessage.type == "candidate")
                    {
                        if (!string.IsNullOrEmpty(routedMessage.from))
                        {
                            CandidateData candidate = new CandidateData
                            {
                                connectionId  = routedMessage.@from,
                                candidate     = msg.candidate,
                                sdpMLineIndex = msg.sdpMLineIndex,
                                sdpMid        = msg.sdpMid
                            };
                            OnIceCandidate?.Invoke(this, candidate);
                        }
                        else
                        {
                            Debug.LogError("Signaling: Received message from unknown peer");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("Signaling: Failed to parse message: " + ex);
            }
        }
    //private void ProcessMessage(byte[] data)
    private void ProcessMessage(string content)
    {
        //var content = Encoding.UTF8.GetString(data);
        Debug.Log($"Signaling: Receiving message: {content}");

        try
        {
            var routedMessage = JsonUtility.FromJson <RoutedMessage <SignalingMessage> >(content);

            SignalingMessage msg;
            if (!string.IsNullOrEmpty(routedMessage.type))
            {
                msg = routedMessage.data;
            }
            else
            {
                msg = JsonUtility.FromJson <SignalingMessage>(content);
            }

            if (!string.IsNullOrEmpty(routedMessage.type))
            {
                if (routedMessage.type == "connect")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    m_mainThreadContext.Post(d => OnCreateConnection?.Invoke(this, msg.connectionId, msg.peerExists),
                                             null);
                }
                else if (routedMessage.type == "disconnect")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    m_mainThreadContext.Post(d => OnDestroyConnection?.Invoke(this, msg.connectionId), null);
                }
                else if (routedMessage.type == "offer")
                {
                    DescData offer = new DescData();
                    offer.connectionId = routedMessage.from;
                    offer.sdp          = msg.sdp;
                    m_mainThreadContext.Post(d => OnOffer?.Invoke(this, offer), null);
                }
                else if (routedMessage.type == "answer")
                {
                    DescData answer = new DescData
                    {
                        connectionId = routedMessage.from,
                        sdp          = msg.sdp
                    };
                    m_mainThreadContext.Post(d => OnAnswer?.Invoke(this, answer), null);
                }
                else if (routedMessage.type == "candidate")
                {
                    CandidateData candidate = new CandidateData
                    {
                        connectionId  = routedMessage.@from,
                        candidate     = msg.candidate,
                        sdpMLineIndex = msg.sdpMLineIndex,
                        sdpMid        = msg.sdpMid
                    };
                    m_mainThreadContext.Post(d => OnIceCandidate?.Invoke(this, candidate), null);
                }
                else if (routedMessage.type == "error")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    Debug.LogError(msg.message);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("Signaling: Failed to parse message: " + ex);
        }
    }
コード例 #10
0
        private void ThreadEventDispatch()
        {
            while (false == EventStop.Wait(1))
            {
                string json   = "";
                bool   pop_ok = EventJsonQueue.TryDequeue(out json);

                if (!pop_ok || json == null || json == "")
                {
                    continue;
                }

                OnEventRawString?.Invoke(this, json);

                JObject    jdata = null;
                EVENT_TYPE type  = ParseEventType(json, out jdata);

                //因為必須在conference裡面中轉各個customized header,不得已只好自己維護live channel的資料...
                //收到CHANNEL_CREATE事件時就收錄channel資訊
                //留在Conference Create時撈出來看 variable_sip_h_X-* 變數....
                switch (type)
                {
                case EVENT_TYPE.CALL_TO_SWITCH:
                    OnCall?.Invoke(this, new CCallEvent(jdata));
                    break;

                case EVENT_TYPE.SWITCH_CALL_USER:
                    OnCall?.Invoke(this, new CCallEvent(jdata));
                    break;

                case EVENT_TYPE.ANSWER:
                    OnAnswer?.Invoke(this, new CAnswerEvent(jdata));
                    break;

                case EVENT_TYPE.HANGUP:
                    OnHangUp?.Invoke(this, new CHangUpEvent(jdata));
                    break;

                case EVENT_TYPE.DESTROY_CALL:
                    OnCallDestroy?.Invoke(this, new CCallEvent(jdata));
                    break;

                case EVENT_TYPE.CONFERENCE_CREATE:
                    OnRoomCreate?.Invoke(this, new CConferenceCreateEvent(jdata));
                    break;

                case EVENT_TYPE.CONFERENCE_DELETE:
                    OnRoomDelete?.Invoke(this, new CConferenceDeleteEvent(jdata));
                    break;

                case EVENT_TYPE.JOIN_CONFERENCE:
                    OnJoinRoom?.Invoke(this, new CJoinConferenceEvent(jdata));
                    break;

                case EVENT_TYPE.LEAVE_CONFERENCE:
                    OnLeaveRoom?.Invoke(this, new CLeaveConferenceEvent(jdata));
                    break;

                case EVENT_TYPE.REGISTER:
                    OnSipRegister?.Invoke(this, new CSipRegister(jdata));
                    break;

                default:
                    Log.Warn($"Unsupported event type {type.ToString()}, skip it...");
                    break;
                }
            }

            //Queue沒有Clear(),只能用這種蠢方法清除
            while (EventJsonQueue.Count > 0)
            {
                string msg = "";
                EventJsonQueue.TryDequeue(out msg);
            }
        }