예제 #1
0
        private Task SetNewQuestion(ASR.Events.AnswerSelectedEventArgs previousAnswer = null)
        {
            return(Task.Run(() =>
            {
                if (previousAnswer != null)
                {
                    var info = engine.AddAnswer(previousAnswer.FieldName, previousAnswer.SelectedAnswer);
                    tts.Speak(string.Join(".", info));
                }
                if (!engine.IsDialogFinished)
                {
                    var dbValuesRequired = new List <string>();
                    var dbHandler = new DbDataHandler();
                    var dialog = engine.GetQuestion(out dbValuesRequired);
                    if (!string.IsNullOrEmpty(dialog.OtherText))
                    {
                        tts.Speak(dialog.OtherText);
                    }
                    foreach (var value in dbValuesRequired)
                    {
                        engine.AddAnswer(value, dbHandler.GetVarValue(value, engine.AnswersCopy));
                    }
                    if (dbValuesRequired != null && dbValuesRequired.Any())
                    {
                        engine.ReLoadPompt(dialog.Model);
                    }

                    if (dialog.Model is null)
                    {
                        viewModel.Dialog.Question = dialog.OtherText;
                        viewModel.Dialog.Answers = new DictationAnswerViewModel();
                    }
                    else
                    {
                        viewModel.Dialog = dialog.Model;
                        StartRecognitionOfCurrentQuestion();
                        tts.Speak(viewModel.Dialog.Question);
                    }
                }
                else
                {
                    viewModel.Dialog.Question = "Goodbye";
                    viewModel.Dialog.Answers = new DictationAnswerViewModel();
                    tts.Speak("Goodbye");
                }
            })
                   .ContinueWith((t) =>
            {
                if (t.Status == TaskStatus.Faulted)
                {
                    var exception = t.Exception.Flatten();
                    Console.WriteLine("Error :" + Environment.NewLine + exception.ToString());
                    tts.Speak("Error occured, please try again");
                    StartRecognitionOfCurrentQuestion();
                }
            }, TaskScheduler.FromCurrentSynchronizationContext()));
        }