public async Task RunAsync(CancellationToken token) { NonBlockingConsole.WriteLine("RunAsync - Entry"); bool startTask = true; List <Task> runTasks = new List <Task>(); lock (s_lock) { if (_state != TranscriptSessionManagerState.Created) { NonBlockingConsole.WriteLine("RunAsync - Warn: TranscriptSessionManager is already running."); startTask = false; if (_runTask != null) { runTasks.Add(_runTask); } } else { _state = TranscriptSessionManagerState.Idle; _cancelToken = token; RegisterEndpointEvents(); _runTask = new Task(() => { #if (CONVERSATION_DIALIN_ENABLED) string conversationUri = _helper.GetRemoteUserURI(); if (string.IsNullOrEmpty(conversationUri)) { NonBlockingConsole.WriteLine("Error: Valid remote user Uri must be provided for CONVERSATION_DIALIN_ENABLED mode.\n Exiting...\n"); return; } StartConversationTranscriptRecorderSession(conversationUri); #endif // (CONVERSATION_DIALIN_ENABLED) #if (CONFERENCE_DIALIN_ENABLED) string conferenceUri = _helper.GetConferenceURI(); if (string.IsNullOrEmpty(conferenceUri)) { NonBlockingConsole.WriteLine("Error: Valid conference Uri must be provided for CONFERENCE_DIALIN_ENABLED mode.\n Exiting...\n"); return; } StartConferenceTranscriptRecorderSession(conferenceUri); #endif // CONFERENCE_DIALIN_ENABLED _waitForTranscriptSessionStarted.WaitOne(); _waitForTranscriptSessionTerminated.WaitOne(); }, token); runTasks.Add(_runTask); } } // lock if (startTask) { _runTask.Start(); } await Task.WhenAll(runTasks.ToArray()); NonBlockingConsole.WriteLine("RunAsync - Exit"); }
public async Task RunAsync(CancellationToken token) { NonBlockingConsole.WriteLine("RunAsync - Entry"); bool startTask = true; List<Task> runTasks = new List<Task>(); lock (s_lock) { if (_state != TranscriptSessionManagerState.Created) { NonBlockingConsole.WriteLine("RunAsync - Warn: TranscriptSessionManager is already running."); startTask = false; if (_runTask != null) { runTasks.Add(_runTask); } } else { _state = TranscriptSessionManagerState.Idle; _cancelToken = token; RegisterEndpointEvents(); _runTask = new Task(() => { #if (CONVERSATION_DIALIN_ENABLED) string conversationUri = _helper.GetRemoteUserURI(); if (string.IsNullOrEmpty(conversationUri)) { NonBlockingConsole.WriteLine("Error: Valid remote user Uri must be provided for CONVERSATION_DIALIN_ENABLED mode.\n Exiting...\n"); return; } StartConversationTranscriptRecorderSession(conversationUri); #endif // (CONVERSATION_DIALIN_ENABLED) #if (CONFERENCE_DIALIN_ENABLED) string conferenceUri = _helper.GetConferenceURI(); if (string.IsNullOrEmpty(conferenceUri)) { NonBlockingConsole.WriteLine("Error: Valid conference Uri must be provided for CONFERENCE_DIALIN_ENABLED mode.\n Exiting...\n"); return; } StartConferenceTranscriptRecorderSession(conferenceUri); #endif // CONFERENCE_DIALIN_ENABLED _waitForTranscriptSessionStarted.WaitOne(); _waitForTranscriptSessionTerminated.WaitOne(); }, token); runTasks.Add(_runTask); } } // lock if (startTask) { _runTask.Start(); } await Task.WhenAll(runTasks.ToArray()); NonBlockingConsole.WriteLine("RunAsync - Exit"); }
public async Task ShutdownAsync(bool runSync = false) { NonBlockingConsole.WriteLine("ShutdownAsync - Entry"); bool startTask = true; List <Task> preShutdownTasks = new List <Task>(); List <Task> shutdownTasks = new List <Task>(); lock (s_lock) { if (_state == TranscriptSessionManagerState.Terminating || _state == TranscriptSessionManagerState.Terminated) { NonBlockingConsole.WriteLine("Warn: Already shutdown or shutting down."); startTask = false; if (_shutdownTask != null) { shutdownTasks.Add(_shutdownTask); } } else { _state = TranscriptSessionManagerState.Terminating; this.UnregisterEndpointEvents(); List <TranscriptRecorderSession> sessionsToShutdown = new List <TranscriptRecorderSession>(); // Add all active conversation transcript sessions to shutdown list foreach (TranscriptRecorderSession t in _activeConversationSessions.Values) { sessionsToShutdown.Add(t); } // Add all active conference transcript sessions to shutdown list foreach (TranscriptRecorderSession t in _activeConferenceSessions.Values) { sessionsToShutdown.Add(t); } _shutdownTask = new Task(() => { SaveTranscripts(); SendTranscripts(); _activeConversationSessions.Clear(); _activeConferenceSessions.Clear(); foreach (TranscriptRecorderSession t in sessionsToShutdown) { Task task = new Task(() => { t.TranscriptRecorderSessionChanged -= this.TranscriptRecorder_OnTranscriptRecorderSessionChanged; t.TranscriptRecorderSessionShutdown -= this.TranscriptRecorder_OnTranscriptRecorderSessionShutdown; t.Shutdown(); }); task.Wait(); } // Terminate user endpoint if (_userEndpoint != null) { _userEndpoint.BeginTerminate(EndTerminateUserEndpoint, _userEndpoint); _waitForUserEndpointTerminated.WaitOne(); } // Clean up by shutting down the platform. if (_helper != null) { _helper.ShutdownPlatform(); } _state = TranscriptSessionManagerState.Terminated; }); shutdownTasks.Add(_shutdownTask); } } // lock if (startTask) { _shutdownTask.Start(); } if (runSync) { Task.WhenAll(shutdownTasks.ToArray()).Wait(); } else { await Task.WhenAll(shutdownTasks.ToArray()); } NonBlockingConsole.WriteLine("ShutdownAsync - Exit"); }
public async Task ShutdownAsync(bool runSync = false) { NonBlockingConsole.WriteLine("ShutdownAsync - Entry"); bool startTask = true; List<Task> preShutdownTasks = new List<Task>(); List<Task> shutdownTasks = new List<Task>(); lock (s_lock) { if (_state == TranscriptSessionManagerState.Terminating || _state == TranscriptSessionManagerState.Terminated) { NonBlockingConsole.WriteLine("Warn: Already shutdown or shutting down."); startTask = false; if (_shutdownTask != null) { shutdownTasks.Add(_shutdownTask); } } else { _state = TranscriptSessionManagerState.Terminating; this.UnregisterEndpointEvents(); List<TranscriptRecorderSession> sessionsToShutdown = new List<TranscriptRecorderSession>(); // Add all active conversation transcript sessions to shutdown list foreach (TranscriptRecorderSession t in _activeConversationSessions.Values) { sessionsToShutdown.Add(t); } // Add all active conference transcript sessions to shutdown list foreach (TranscriptRecorderSession t in _activeConferenceSessions.Values) { sessionsToShutdown.Add(t); } _shutdownTask = new Task(()=> { SaveTranscripts(); SendTranscripts(); _activeConversationSessions.Clear(); _activeConferenceSessions.Clear(); foreach (TranscriptRecorderSession t in sessionsToShutdown) { Task task = new Task(()=> { t.TranscriptRecorderSessionChanged -= this.TranscriptRecorder_OnTranscriptRecorderSessionChanged; t.TranscriptRecorderSessionShutdown -= this.TranscriptRecorder_OnTranscriptRecorderSessionShutdown; t.Shutdown(); }); task.Wait(); } // Terminate user endpoint if (_userEndpoint != null) { _userEndpoint.BeginTerminate(EndTerminateUserEndpoint, _userEndpoint); _waitForUserEndpointTerminated.WaitOne(); } // Clean up by shutting down the platform. if (_helper != null) { _helper.ShutdownPlatform(); } _state = TranscriptSessionManagerState.Terminated; }); shutdownTasks.Add(_shutdownTask); } } // lock if (startTask) { _shutdownTask.Start(); } if (runSync) { Task.WhenAll(shutdownTasks.ToArray()).Wait(); } else { await Task.WhenAll(shutdownTasks.ToArray()); } NonBlockingConsole.WriteLine("ShutdownAsync - Exit"); }