Esempio n. 1
0
        public override async Task <IMessageWaiter> GetAsync(IEnumerable <Type> messageTypes, Func <IMessage, bool> filter)
        {
            IMessageWaiter messageWaiter = await base.GetAsync(messageTypes, filter);

            foreach (Type messageType in messageTypes)
            {
                await _bus.Subscribe(messageType);
            }

            return(messageWaiter);
        }
Esempio n. 2
0
        protected virtual void Release(IEnumerable <Type> messageTypes, IMessageWaiter messageWaiter)
        {
            MessageWaiterGroup mwg = (MessageWaiterGroup)messageWaiter;

            foreach (Type messageType in messageTypes)
            {
                if (_messageWaiters.TryGetValue(messageType, out var list))
                {
                    mwg.MessageWaiters.ForEach(m => list.TryRemove(m, out _));
                }
            }
        }
        private async Task <IMessage> SubscribeToEvents(IBus bus, IMessage message, IMessagesWaiter messagesWaiter)
        {
            // Handle only commands
            if (message is ICommand)
            {
                // Create events to subscribe for this command
                Type[] eventTypes = EventTypes.Select(t => t.IsGenericTypeDefinition ? t.MakeGenericType(message.GetType()) : t).ToArray();
                // Create wait task
                using (IMessageWaiter messageWaiter = await messagesWaiter.GetAsync(eventTypes, m => m is ICommandEvent ce && ce.CommandId == message.MessageId))
                {
                    return(await messageWaiter.WhenAsync(TimeSpan.FromSeconds(30)));
                }
            }

            return(null);
        }
Esempio n. 4
0
 protected abstract IExpectBuilder <AnyMessagePublisher> ConfigureWait(IMessageWaiter <AnyMessagePublisher> waiter);