コード例 #1
0
        private async Task ProcessRecognizedCall(SpeechRecognitionEventArgs e)
        {
            using (var activity = Constants.ActivitySource.StartActivity("ProcessRecognizedCall", ActivityKind.Server))
            {
                Logger.Info($"{_logClientId}| Incoming Transmission: {e.Result.Text}");
                var luisJson = Task.Run(() => LuisService.ParseIntent(e.Result.Text)).Result;
                Logger.Debug($"{_logClientId}| LUIS Response: {luisJson}");

                var radioCall = new BaseRadioCall(luisJson);

                activity?.AddTag("Frequency", _frequency);
                activity?.AddTag("BotType", _botType);
                activity?.AddTag("Callsign", _callsign);
                activity?.AddTag("Sender", radioCall.Sender?.Callsign);
                activity?.AddTag("Intent", radioCall.Intent);
                activity?.AddTag("Request", radioCall.Message);

                var response = Controller.ProcessRadioCall(radioCall);
                activity?.AddTag("Response Text", response);

                if (!string.IsNullOrEmpty(response))
                {
                    Logger.Info($"{_logClientId}| Outgoing Transmission: {response}");
                    var audioResponse = await Task.Run(() => Speaker.CreateResponse(
                                                           $"<speak version=\"1.0\" xmlns=\"https://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name =\"{Controller.Voice}\">{response}</voice></speak>"));

                    if (audioResponse == null)
                    {
                        activity?.AddTag("Response", "Failure");
                        activity?.AddEvent(new ActivityEvent("Synthesis Failure"));
                        Logger.Error($"{_logClientId}| Synthesis Failure");
                        using (Constants.ActivitySource.StartActivity("EnqueueResponseAudio", ActivityKind.Producer))
                        {
                            Logger.Trace($"{_logClientId}| Sending Failure Message");
                            Controller.Radio.TransmissionQueue.Enqueue(FailureMessage);
                        }
                    }
                    else
                    {
                        activity?.AddTag("Response", "Success");
                        using (Constants.ActivitySource.StartActivity("EnqueueResponseAudio", ActivityKind.Producer))
                        {
                            Controller.Radio.TransmissionQueue.Enqueue(audioResponse);
                        }
                    }
                }
                else
                {
                    activity?.AddTag("Response", "Ignored");
                    Logger.Info($"{_logClientId}| Radio Call Ignored due to null response for Radio Call Processing");
                }

                if (Controller.Radio.discordTransmissionLogChannelId > 0)
                {
                    LogTransmissionToDiscord(radioCall, response);
                }
            }
        }
コード例 #2
0
        public static async Task <string> Process(BaseRadioCall baseRadioCall, string voice, ConcurrentQueue <byte[]> responseQueue)
        {
            var radioCall = new SetWarningRadiusRadioCall(baseRadioCall);

            Logger.Debug($"Setting up Warning Radius for {radioCall.Sender.Id} - {radioCall.Sender}");

            if (radioCall.WarningRadius == -1)
            {
                return("I did not catch the warning distance.");
            }

            var _ = new WarningRadiusChecker(radioCall.Sender, radioCall.ReceiverName, voice, radioCall.WarningRadius, responseQueue);

            return(string.Format(Responses[Random.Next(Responses.Count)], radioCall.WarningRadius));
        }
コード例 #3
0
 public static async Task PopulatePilotData(BaseRadioCall radioCall)
 {
     await PopulatePilotData(radioCall.Sender);
 }