private void ShutdownUserEndpoint(AsyncTask task, object state) { UserEndpoint userEndpoint = state as UserEndpoint; if (userEndpoint == null) { task.Complete(null); return; } task.DoOneStep( delegate() { Logger.Log(Logger.LogLevel.Info, "Terminating UserEndpoint." + userEndpoint.OwnerUri); userEndpoint.BeginTerminate( delegate(IAsyncResult ar) { task.DoFinalStep( delegate() { userEndpoint.EndTerminate(ar); Logger.Log(Logger.LogLevel.Info, "Terminated UserEndpoint." + userEndpoint.OwnerUri); }); }, null); }); }
public static void DisconnectOfficeCommunicationServer(UserEndpoint userEndpoint) { Console.WriteLine("Disconnecting from OCS..."); userEndpoint.EndTerminate(userEndpoint.BeginTerminate(null, null)); CollaborationPlatform platform = userEndpoint.Platform; platform.EndShutdown(platform.BeginShutdown(null, null)); Console.WriteLine("\tSuccess"); }
/// <summary> /// Tear down the endpoint gracefully /// </summary> private void CleanupMCS() { shutdownLock.AcquireWriterLock(Timeout.Infinite); shutdownLock.ReleaseWriterLock(); // Clean-up the browser this.CleanupBrowser(); // Clean-up the call this.CleanupCall(); if (endpoint != null) { endpoint.EndTerminate(endpoint.BeginTerminate(null, null)); } }
public void SetPresence(User user, PreferredUserStatus status) { if (!LyncCollaboration.HasStarted) { LyncCollaboration.Start(); } var state = PresenceState.UserAway; switch (status) { case PreferredUserStatus.BeRightBack: state = PresenceState.UserBeRightBack; break; case PreferredUserStatus.Busy: state = PresenceState.UserBusy; break; case PreferredUserStatus.DoNotDisturb: state = PresenceState.UserDoNotDisturb; break; case PreferredUserStatus.Offwork: state = PresenceState.UserOffWork; break; case PreferredUserStatus.Online: state = PresenceState.UserAvailable; break; } user.ClearPresence(); var host = Plugin.LyncPlugin.Configuration.GetString("host"); var appPort = Plugin.LyncPlugin.Configuration.GetInt("appPort"); var sip = "sip:" + user.SipUri(); var endpoint = new UserEndpoint(LyncCollaboration.Platform, new UserEndpointSettings(sip, host, appPort)); endpoint.EndEstablish(endpoint.BeginEstablish(null, null)); endpoint.LocalOwnerPresence.EndSubscribe(endpoint.LocalOwnerPresence.BeginSubscribe(null, null)); endpoint.LocalOwnerPresence.EndPublishPresence(endpoint.LocalOwnerPresence.BeginPublishPresence(new PresenceCategory[] { state }, null, null)); endpoint.EndTerminate(endpoint.BeginTerminate(null, null)); }
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"); }