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;
        }
    }
Пример #2
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);
        }
Пример #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
 public void Answer(XmlReader reader)
 {
     State = RequestState.Answered;
     if (reader.GetAttribute("type") != "error")
     {
         OnAnswer?.Invoke(reader);
     }
     else
     {
         OnError?.Invoke(reader);
     }
 }
Пример #5
0
 public void Setup(string[] text, OnAnswer callback)
 {
     textboxLeft        = Resources.Load <Texture2D>("Textures/textboxLeft");
     textboxMiddle      = Resources.Load <Texture2D>("Textures/textbox");
     textboxRight       = Resources.Load <Texture2D>("Textures/textboxRight");
     selectIcon         = Resources.Load <Texture2D>("Textures/xbutton");
     this.text          = new List <string>(text);
     this.callback      = callback;
     textStyle          = new GUIStyle();
     textStyle.font     = CreateTextbox.Font;
     textStyle.richText = true;
     textStyle.fontSize = CreateTextbox.FontSize;
     textStyle.wordWrap = true;
     textWidth          = Screen.width - 2 * leftPadding - textboxLeft.width - textboxRight.width
                          - 2 * textLeftPadding;
     textHeight = textboxMiddle.height - 2 * textTopPadding;
 }
Пример #6
0
        /// <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());
        }
Пример #7
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);
            }
        }
Пример #8
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]));
        }
Пример #9
0
        public Task Pipe(string pid, string json)
        {
            var payload = JsonSerializer.Deserialize <Payload>(json); // TODO: MAYBE FASTER

            switch (payload.Type)
            {
            case New:
                OnNew.Pipe(pid, json);
                break;

            case Bye:
                OnBye.Pipe(pid, json);
                break;

            case Offer:
                OnOffer.Pipe(pid, json);
                break;

            case Answer:
                OnAnswer.Pipe(pid, json);
                break;

            case Candidate:
                OnCandidate.Pipe(pid, json);
                break;

            case KeepAlive:
                OnKeepAlive.Pipe(pid, json);
                break;

            default:
                break;
            }

            return(Task.CompletedTask);
        }
Пример #10
0
    public void ShowQuestionNode(DialogueDataNode node, List <DataGraphNode> answers, OnAnswer onAnswer)
    {
        content.text = node.text;

        next.gameObject.SetActive(false);
        answersPanel.gameObject.SetActive(true);

        for (int i = 0; i < answerButtons.Length; i++)
        {
            if (i >= answers.Count)
            {
                answerButtons[i].gameObject.SetActive(false);
                continue;
            }


            answerButtons[i].GetComponentInChildren <Text>().text = ((DialogueDataNode)answers[i]).text;
            answerButtons[i].gameObject.SetActive(true);

            answerButtons[i].onClick.RemoveAllListeners();

            DialogueDataNode answer = (DialogueDataNode)answers[i];
            answerButtons[i].onClick.AddListener(() =>
            {
                onAnswer(answer);
            });
        }
    }
Пример #11
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);
        }
    }
Пример #13
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);
            }
        }
Пример #14
0
 public void GiveAnswer(bool answer)
 {
     OnAnswer.Fire(answer);
     answerHandler(answer);
     Hide();
 }
Пример #15
0
 public void SendCommand(Command cmd, byte[] args, OnAnswer onAnswer)
 {
     Log.Write(">> cmd:" + cmd.ToString() + " args:" + args);
     Send(cmd, args);
     Result result = Result.ERROR;
     byte[] answer = null;
     if (Receive(ref result, out answer))
     {
         Log.Write("<< res:" + result.ToString() + " args:" + answer);
         if (onAnswer != null) onAnswer(answer);
     }
 }
Пример #16
0
 public void SendSetVarCommand(byte[] varData, OnAnswer onAnswer)
 {
     SendCommand(Command.SET_VAR, varData, onAnswer);
 }
Пример #17
0
 public void SendGPUProfilerCommand(OnAnswer onAnswer)
 {
     byte[] data = new byte[] { (byte)ProfileDataType.GPU };
     SendCommand(Command.GET_PROFILER_DATA, data, onAnswer);
 }
Пример #18
0
 public void SendGetStatsCommand(OnAnswer onAnswer)
 {
     SendCommand(Command.GET_STATS, null, onAnswer);
 }
Пример #19
0
 public void SendGetAllCommand(OnAnswer onAnswer)
 {
     SendCommand(Command.GET_ALL_VARS, null, onAnswer);
 }