コード例 #1
0
        public void LoadMessageHandlerInvokers()
        {
            _status = Status.Loaded;

            _invokers = LoadInvokers();

            LoadDispatchQueues();

            MessageHandlerInvokersUpdated?.Invoke();
        }
コード例 #2
0
        public void RemoveInvoker(IMessageHandlerInvoker eventHandlerInvoker)
        {
            lock (_lock)
            {
                var messageTypeInvokers = _invokers.GetValueOrDefault(eventHandlerInvoker.MessageTypeId);
                if (messageTypeInvokers == null)
                {
                    return;
                }

                var newMessageTypeInvokers = new List <IMessageHandlerInvoker>(messageTypeInvokers.Where(x => x != eventHandlerInvoker));
                _invokers[eventHandlerInvoker.MessageTypeId] = newMessageTypeInvokers;
            }

            MessageHandlerInvokersUpdated?.Invoke();
        }
コード例 #3
0
        public void AddInvoker(IMessageHandlerInvoker newEventHandlerInvoker)
        {
            lock (_lock)
            {
                var existingMessageTypeInvokers = _invokers.GetValueOrDefault(newEventHandlerInvoker.MessageTypeId) ?? new List <IMessageHandlerInvoker>();
                var newMessageTypeInvokers      = new List <IMessageHandlerInvoker>(existingMessageTypeInvokers.Count + 1);
                newMessageTypeInvokers.AddRange(existingMessageTypeInvokers);
                newMessageTypeInvokers.Add(newEventHandlerInvoker);

                var dispatchQueueName = newEventHandlerInvoker.DispatchQueueName;
                if (!_dispatchQueues.ContainsKey(dispatchQueueName))
                {
                    var dispatchQueue = _dispatchQueueFactory.Create(dispatchQueueName);
                    if (_dispatchQueues.TryAdd(dispatchQueueName, dispatchQueue) && _status == Status.Started)
                    {
                        dispatchQueue.Start();
                    }
                }

                _invokers[newEventHandlerInvoker.MessageTypeId] = newMessageTypeInvokers;
            }

            MessageHandlerInvokersUpdated?.Invoke();
        }
コード例 #4
0
 public void RaiseMessageHandlerInvokersUpdated() => MessageHandlerInvokersUpdated?.Invoke();