using MessagePipe.Internal; using System.Collections.Generic; using System.Linq; namespace MessagePipe { [Preserve] public sealed class RequestHandler : IRequestHandler { readonly IRequestHandlerCore handler; [Preserve] public RequestHandler(IRequestHandlerCore handler, FilterAttachedRequestHandlerFactory handlerFactory) { this.handler = handlerFactory.CreateRequestHandler(handler); } public TResponse Invoke(TRequest request) { return handler.Invoke(request); } } [Preserve] public sealed class RequestAllHandler : IRequestAllHandler { readonly IRequestHandlerCore[] handlers; [Preserve] public RequestAllHandler(IEnumerable> handlers, FilterAttachedRequestHandlerFactory handlerFactory) { var collection = (handlers as ICollection>) ?? handlers.ToArray(); var array = new IRequestHandlerCore[collection.Count]; var i = 0; foreach (var item in collection) { array[i++] = handlerFactory.CreateRequestHandler(item); } this.handlers = array; } public TResponse[] InvokeAll(TRequest request) { var responses = new TResponse[handlers.Length]; for (int i = 0; i < handlers.Length; i++) { responses[i] = handlers[i].Invoke(request); } return responses; } public IEnumerable InvokeAllLazy(TRequest request) { for (int i = 0; i < handlers.Length; i++) { yield return handlers[i].Invoke(request); } } } }