Exemplo n.º 1
0
        /// <summary>
        /// Invalidates the client.
        /// </summary>
        public void Invalidate()
        {
            lock (this.SyncRoot)
            {
                if (!IsValid || IsInvalidating)
                {
                    return; // Already shutting down.
                }
                SetIsInvalidating(true);
            }
            _clientManager.RemoveSubscriber(this);

            // Unregister from all Sessions.
            if (_sessions != null && _sessions.Count != 0)
            {
                foreach (ISession session in _sessions)
                {
                    UnregisterSession(session);
                }
            }
            // Invalidate associated MessageClient subscriptions.
            if (_messageClients != null && _messageClients.Count != 0)
            {
                foreach (MessageClient messageClient in _messageClients)
                {
                    messageClient.RemoveMessageClientDestroyedListener(this);
                    messageClient.Invalidate();
                }
                _messageClients.Clear();
            }
            // Notify destroy listeners that we're shutting the FlexClient down.
            if (_destroyedListeners != null && _destroyedListeners.Count != 0)
            {
                foreach (IClientListener listener in _destroyedListeners)
                {
                    listener.ClientDestroyed(this);
                }
                _destroyedListeners.Clear();
            }
            // Close any registered push handlers.
            if (_endpointPushHandlers != null && _endpointPushHandlers.Count != 0)
            {
                foreach (IEndpointPushHandler handler in _endpointPushHandlers.Values)
                {
                    handler.Close();
                }
                _endpointPushHandlers = null;
            }
            lock (this.SyncRoot)
            {
                SetIsValid(false);
                SetIsInvalidating(false);
            }
            if (log.IsDebugEnabled)
            {
                log.Debug(__Res.GetString(__Res.Client_Invalidated, _id));
            }
        }