/// <summary> /// Initializes a new instance of the <see cref="DialogManager{TInputType}"/> class. /// </summary> /// <param name="dialogBackend"> The dialog backend for the manager to use. </param> /// <param name="keywordRegistration"> The keyword registration with the current keyword file information.</param> /// <param name="dialogAudioInput"> The input audio provider. </param> /// <param name="agentSessionManager"> The manager that provides the instance of agent session wrapper. </param> /// <param name="dialogAudioOutput"> The dialog audio output sink to use. </param> public DialogManager( IDialogBackend <TInputType> dialogBackend, IKeywordRegistration keywordRegistration, IDialogAudioInputProvider <TInputType> dialogAudioInput, IAgentSessionManager agentSessionManager, IDialogAudioOutputAdapter dialogAudioOutput = null) { Contract.Requires(dialogBackend != null); Contract.Requires(agentSessionManager != null); this.logger = LogRouter.GetClassLogger(); this.dialogBackend = dialogBackend; this.dialogBackend.SessionStarted += (id) => this.logger.Log($"DialogManager: Session start: {id}"); this.dialogBackend.SessionStopped += (id) => this.logger.Log($"DialogManager: Session stop: {id}"); this.dialogBackend.KeywordRecognizing += this.OnKeywordRecognizing; this.dialogBackend.KeywordRecognized += this.OnKeywordRecognized; this.dialogBackend.SpeechRecognizing += this.OnSpeechRecognizing; this.dialogBackend.SpeechRecognized += async(text) => await this.OnSpeechRecognizedAsync(text); this.dialogBackend.DialogResponseReceived += this.OnActivityReceived; this.dialogBackend.ErrorReceived += async(errorInformation) => await this.OnErrorReceivedAsync(errorInformation); this.dialogAudioInput = dialogAudioInput; this.keywordRegistration = keywordRegistration; this.agentSessionManager = agentSessionManager; this.agentSessionManager.SignalDetected += (sender, args) => this.HandleSignalDetection(args); this.InitializeSignalDetectionHelper(); _ = this.InitializeAsync(dialogAudioOutput); }
public static async Task<DialogManager<List<byte>>> CreateMockManagerAsync( IDialogBackend<List<byte>> backend, IKeywordRegistration keywordRegistration, IAgentSessionManager agentSessionManager) { var dialogManager = new DialogManager<List<byte>>(backend, keywordRegistration, new AgentAudioInputProvider(), agentSessionManager); await dialogManager.InitializeAsync(); return dialogManager; }
protected DialogManagerShim( IDialogBackend<List<byte>> backend, IKeywordRegistration keywordRegistration, DialogAudioOutputAdapter outputAdapter) : base( backend, keywordRegistration, new AgentAudioInputProvider(), new AgentSessionManager(), dialogAudioOutput: outputAdapter) { }
/// <summary> /// Free disposable resources per the IDisposable interface. /// </summary> /// <param name="disposing"> Whether managed state is being disposed. </param> protected virtual async void Dispose(bool disposing) { if (!this.AlreadyDisposed) { if (disposing) { await this.StopAudioCaptureAsync(); await this.StopAudioPlaybackAsync(); this.dialogBackend?.Dispose(); this.dialogAudioInput?.Dispose(); this.dialogAudioOutput?.Dispose(); } this.dialogBackend = null; this.dialogAudioInput = null; this.dialogAudioOutput = null; this.AlreadyDisposed = true; } }