Exemplo n.º 1
0
        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");
        }
Exemplo n.º 3
0
        /// <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));
            }
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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");
        }