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); }
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); }
protected abstract IExpectBuilder <AnyMessagePublisher> ConfigureWait(IMessageWaiter <AnyMessagePublisher> waiter);