public static async Task <IDisposable> SubscribeAndReplyToExclusive <TMessageRequest, TMessageResponse>(this IAsyncNetworkBus bus, Func <TMessageRequest, Task <bool> > canReply, Func <TMessageRequest, TMessageResponse> func, Guid requestReferenceId) where TMessageRequest : notnull, IMessage, new() where TMessageResponse : notnull, IMessage, new() { var disposable1 = await bus.SubscribeAsync <ExclusiveRequestMessage <TMessageRequest> >(async msg => { if (await canReply(msg.Request)) { await bus.PublishAsync(new ExclusiveResponseMessage <TMessageRequest>(requestReferenceId), null); } }, null); var disposable2 = await bus.SubscribeAndReplyAsync <ExclusiveAcceptedRequestMessage <TMessageRequest> >(msg => { return(Task.FromResult((IMessage) new ExclusiveAcceptedResponseMessage <TMessageResponse>(func(msg.Request)))); }, requestReferenceId); return(new CompositeDisposable(disposable1, disposable2)); }
public static Task <IDisposable> SubscribeAndReplyAsync <TMessageRequest, TMessageResponse>(this IAsyncNetworkBus bus, Func <TMessageRequest, Task <TMessageResponse> > func, Guid?referenceId) where TMessageRequest : notnull, IMessage, new() where TMessageResponse : notnull, IMessage, new() { return(bus.SubscribeAndReplyAsync <TMessageRequest>(async message => await func(message), referenceId)); }
public static Task <IDisposable> RegisterHandlerAsync <TMessageRequest, TMessageResponse>(this IAsyncNetworkBus bus, IMessageHandler <TMessageRequest, TMessageResponse> handler, Guid?referenceId = null) where TMessageRequest : notnull, IMessage, new() where TMessageResponse : notnull, IMessage, new() { return(bus.SubscribeAndReplyAsync <TMessageRequest, TMessageResponse>(handler.HandleAsync, referenceId)); }