示例#1
0
        /// <summary>
        /// 移除订阅
        /// </summary>
        /// <param name="eventName"></param>
        /// <param name="subscriptionInfo"></param>
        private void DoRemoveSubscription(string eventName, SubscriptionInfo subscriptionInfo)
        {
            if (eventName == null)
            {
                throw new ArgumentNullException(nameof(eventName));
            }
            if (subscriptionInfo == null)
            {
                throw new ArgumentNullException(nameof(subscriptionInfo));
            }
            if (!_handlers.ContainsKey(eventName))
            {
                throw new ArgumentException($"未注册事件{eventName}", nameof(eventName));
            }
            _handlers[eventName].Remove(subscriptionInfo);
            if (_handlers[eventName].Any())
            {
                return;
            }
            _handlers.Remove(eventName);
            Type eventType = GetEventTypeByName(eventName);

            if (eventType != null)
            {
                _eventTypes.Remove(eventType);
            }
            OnEventRemoved?.Invoke(this, eventName);
        }
示例#2
0
        private void RemoveSubscription(
            string eventName,
            Subscription subsToRemove
            )
        {
            if (subsToRemove == null)
            {
                return;
            }

            // a necessidade da reatribuição abaixo é justificada pelo uso desta lista durante o consumo.
            // se a mesma for modificada, será gerada uma exceção de coleção modificada no consumo de mensagens.
            _handlers[eventName] = new List <Subscription>(_handlers[eventName]);
            _handlers[eventName].Remove(subsToRemove);

            if (_handlers[eventName].Any())
            {
                return;
            }

            _handlers.Remove(eventName);
            if (OnEventRemoved != null)
            {
                OnEventRemoved.Invoke(this, new EventEventArgs(eventName));
            }
        }
        public void RemoveHandler(Type messageType, Type handlerType)
        {
            var baseHandlerTypes = MessageHandlerExtensions.GetBaseHandlerTypes(handlerType);

            foreach (var baseHandlerType in baseHandlerTypes)
            {
                var messageType1 = baseHandlerType.GenericTypeArguments.Single();
                if (messageType != messageType1)
                {
                    continue;
                }
                if (!_handlerDict.TryGetValue(messageType, out var handlers))
                {
                    continue;
                }
                if (handlers.All(handlerWrapper => handlerWrapper.BaseHandlerType != baseHandlerType))
                {
                    continue;
                }
                handlers = handlers.Where(x => x.BaseHandlerType != baseHandlerType).ToList();
                if (handlers.Count != 0)
                {
                    continue;
                }
                _handlerDict.Remove(messageType);
                var eventName = MessageNameAttribute.GetNameOrDefault(messageType);
                if (_messageTypeMappingDict.ContainsKey(eventName))
                {
                    _messageTypeMappingDict.Remove(eventName);
                }
                OnEventRemoved?.Invoke(this, messageType);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TEvent"></typeparam>
        /// <typeparam name="TEventHandler"></typeparam>
        public void RemoveSubscription <TEvent, TEventHandler>()
            where TEventHandler : IEventHandler <TEvent>
        {
            var eventName = GetEventKey <TEvent>();

            if (!HasSubscriptions(eventName))
            {
                return;
            }

            var handlerType  = typeof(TEventHandler);
            var eventHandler = eventHandlers[eventName].SingleOrDefault(_ => _ == handlerType);

            if (eventHandler == null)
            {
                return;
            }

            eventHandlers[eventName].Remove(eventHandler);
            if (!eventHandlers[eventName].Any())
            {
                eventHandlers.Remove(eventName);
                eventTypes.Remove(eventName);

                OnEventRemoved.Invoke(this, eventName);
            }
        }
示例#5
0
 public void RemoveEvent(ScheduledEvent ev)
 {
     if (listofevents.Contains(ev))
     {
         listofevents.Remove(ev);
         OnEventRemoved?.Invoke(ev);
     }
 }
示例#6
0
        private void RaiseOnEventRemoved(string eventName)
        {
            var handler = OnEventRemoved;

            if (handler != null)
            {
                OnEventRemoved?.Invoke(this, eventName);
            }
        }
 void RemoveSubscription(string eventName, Subscription subsToRemove)
 {
     if (subsToRemove != null)
     {
         _eventHandlers[eventName].Remove(subsToRemove);
         if (!_eventHandlers[eventName].Any())
         {
             _eventHandlers.Remove(eventName);
             OnEventRemoved?.Invoke(this, eventName);
         }
     }
 }
        private void RemoveSubscription(string eventName, Subscription subsToRemove)
        {
            if (subsToRemove == null)
            {
                return;
            }
            _handlers[eventName].Remove(subsToRemove);

            if (_handlers[eventName].Any())
            {
                return;
            }

            _handlers.Remove(eventName);
            OnEventRemoved?.Invoke(this, eventName);
        }
        public void RemoveHandler(Type messageType, Type handlerType)
        {
            var handler = _messageHandlerWrappers
                          .FirstOrDefault(p => p.MessageType == messageType && p.HandlerType == handlerType);

            if (handler != null)
            {
                _messageHandlerWrappers.Remove(handler);
            }

            if (_messageHandlerWrappers.Any(p => p.MessageType == messageType))
            {
                return;
            }

            OnEventRemoved?.Invoke(this, messageType);
        }
示例#10
0
        private void RemoveHandler(string eventName, SubscriptionInfo subscription)
        {
            if (subscription != null)
            {
                _handlers[eventName].Remove(subscription);
                if (!_handlers[eventName].Any())
                {
                    _handlers.Remove(eventName);
                    var eventType = _eventTypes.SingleOrDefault(e => e.Name == eventName);
                    if (eventType != null)
                    {
                        _eventTypes.Remove(eventType);
                    }

                    OnEventRemoved?.Invoke(this, eventName);
                }
            }
        }
示例#11
0
        /// <summary>
        /// 移除订阅
        /// </summary>
        /// <typeparam name="TEvent"></typeparam>
        /// <typeparam name="THandle"></typeparam>
        public void RemoveSubscription <TEvent, THandle>()
            where TEvent : IntegrationEvent
            where THandle : IIntegrationEventHandle <TEvent>
        {
            var handlerToRemove = FindSubscriptionToRemove <TEvent, THandle>();
            var eventName       = GetEventKey <TEvent>();
            var handleType      = typeof(THandle);

            _handlers[eventName].Remove(handleType);
            if (!_handlers[eventName].Any())
            {
                _handlers.Remove(eventName);
                var eventType = _eventTypes.SingleOrDefault(e => e.Name == eventName);
                if (eventType != null)
                {
                    _eventTypes.Remove(eventType);
                }
                OnEventRemoved?.Invoke(this, eventName);
            }
        }
示例#12
0
        public void RemoveSubscription <TEvent, TEventHandler>()
            where TEvent : Event
            where TEventHandler : IEventHandler <TEvent>
        {
            var eventName           = GetEventKey <TEvent>();
            var handlerToRemoveType = typeof(TEventHandler);
            var handlerToRemove     = _handlers[eventName].SingleOrDefault(eventHandler => eventHandler.GetType() == handlerToRemoveType);

            if (handlerToRemove != null)
            {
                _handlers[eventName].Remove(handlerToRemove);
                if (!_handlers[eventName].Any())
                {
                    _handlers.Remove(eventName);
                    var eventType = _eventTypes.SingleOrDefault(e => e.Name == eventName);
                    if (eventType != null)
                    {
                        _eventTypes.Remove(eventType);
                    }

                    OnEventRemoved.Invoke(this, eventName);
                }
            }
        }
示例#13
0
        public void RemoveSubscription <TEvent, TEventHandler>()
            where TEvent : Event
            where TEventHandler : IEventHandler <TEvent>
        {
            var eventName       = GetEventKey <TEvent>();
            var handlerToRemove = handlers[eventName].SingleOrDefault(type => type == typeof(TEventHandler));

            if (handlerToRemove != null)
            {
                handlers[eventName].Remove(handlerToRemove);

                if (!handlers[eventName].Any())
                {
                    handlers.Remove(eventName);
                    var eventType = eventTypes.SingleOrDefault(@event => @event.Name == eventName);
                    if (eventType != null)
                    {
                        eventTypes.Remove(eventType);
                    }

                    OnEventRemoved?.Invoke(this, eventName);
                }
            }
        }
 private void RaiseOnEventRemoved(string eventName)
 {
     OnEventRemoved?.Invoke(this, eventName);
 }
 protected void RaiseOnEventRemoved(string eventName)
 {
     OnEventRemoved?.Invoke(this, eventName);
 }
示例#16
0
        private void RemoveEvent(string eventName)
        {
            _eventHandlers.Remove(eventName);

            OnEventRemoved?.Invoke(this, eventName);
        }