Exemple #1
0
        public Message EndRequest(IAsyncResult result)
        {
            if (result == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("result");
            }

            IAsyncRequest asyncRequest = result as IAsyncRequest;

            if (asyncRequest == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("result", SR.GetString(SR.InvalidAsyncResult));
            }

            try
            {
                Message reply = asyncRequest.End();

                if (DiagnosticUtility.ShouldTraceInformation)
                {
                    TraceUtility.TraceEvent(TraceEventType.Information, TraceCode.RequestChannelReplyReceived,
                                            SR.GetString(SR.TraceCodeRequestChannelReplyReceived), reply);
                }

                return(reply);
            }
            finally
            {
                ReleaseRequest(asyncRequest);
            }
        }
Exemple #2
0
        public async Task<IAsyncResponse> ExecuteAsync(IAsyncRequest request)
        {
            try
            {
                _log.DebugFormat("Recieved async request : {0}, Id - {1} @ {2}", request.GetType().Name, request.Id, DateTime.Now);

                var router = IoC.Container.Resolve<IAsyncRouter>();

                var response = await router.ExecuteRequestAsync(request);

                _log.DebugFormat("Returning async request : {0}, Id - {1} @ {2}", request.GetType().Name, request.Id, DateTime.Now);

                return response;
            }
            catch (Exception ex)
            {
                _log.DebugFormat("Failed async request : {0}, Id - {1} @ {2}. {3}", request.GetType().Name, request.Id, DateTime.Now, ex.Message);

                var genericFault = new GenericFault
                {
                    Operation = request.GetType().FullName,
                    Message = ex.Message
                };

                throw new FaultException<GenericFault>(genericFault, ex.Message);
            }
        }
        public Task<TResponse> SendAsync<TResponse>(IAsyncRequest<TResponse> request)
        {
            if (request == null)
                throw new ArgumentNullException(nameof(request));

            return _mediator.SendAsync(request.RouteTo(_baseAddress));
        }
Exemple #4
0
 public static Cached <TResponse> Cached <TResponse>(
     this IAsyncRequest <TResponse> request, TimeSpan timeToLive)
 {
     return(new Cached <TResponse>(request)
     {
         TimeToLive = timeToLive
     });
 }
 private CacheResponse RefreshResponse(IAsyncRequest <TResponse> request)
 {
     return(new CacheResponse
     {
         Response = _mediator.SendAsync(request),
         LastUpdated = DateTime.UtcNow
     });
 }
Exemple #6
0
 public static Cached <TResponse> InvalidateCache <TResponse>(
     this IAsyncRequest <TResponse> request)
 {
     return(new Cached <TResponse>(request)
     {
         Invalidate = true
     });
 }
Exemple #7
0
        public async Task <TResponse> SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            var defaultHandler = GetHandler(request);

            TResponse result = await defaultHandler.Handle(request);

            return(result);
        }
Exemple #8
0
        protected RequestDecorator(IAsyncRequest <TResponse> request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            Request = request;
        }
        public AsyncHandlerInvocationResult InvokeHandler(IAsyncRequest request, IApplicationState state)
        {
            if (request is THandlerRequest typedRequest)
            {
                var result = _handler.HandleAsync(typedRequest, state);
                return(new AsyncHandlerInvocationResult(result));
            }

            return(default);
Exemple #10
0
        internal void Initialize(IFileSource fileSource, CanonicalTileId canonicalTileId, string mapId, Action p)
        {
            Cancel();

            _state    = State.Loading;
            _id       = canonicalTileId;
            _callback = p;
            _request  = fileSource.Request(MakeTileResource(mapId).GetUrl(), HandleTileResponse, tileId: _id, mapId: mapId);
        }
 public static Routed<TResponse> RouteTo<TResponse>(
     this IAsyncRequest<TResponse> request, string route, string tag = null)
 {
     return new Routed<TResponse>(request)
     {
         Route = route,
         Tag   = tag
     };
 }
Exemple #12
0
        /// <summary>
        ///     Initializes the <see cref="T:Mapbox.Map.Tile"/> object. It will
        ///     start a network request and fire the callback when completed.
        /// </summary>
        /// <param name="param"> Initialization parameters. </param>
        /// <param name="callback"> The completion callback. </param>
        public void Initialize(Parameters param, Action callback)
        {
            this.Cancel();

            this.state    = State.Loading;
            this.id       = param.Id;
            this.request  = param.Fs.Request(this.MakeTileResource(param.MapId).GetUrl(), this.HandleTileResponse);
            this.callback = callback;
        }
Exemple #13
0
        public async Task <TResponse> SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            _logger.LogTrace("Send async {@request", request);

            var response = await _inner.SendAsync(request);

            LogResponseIfError(response);
            return(response);
        }
Exemple #14
0
        /// <summary>
        ///     Initializes the <see cref="T:Mapbox.Map.Tile"/> object. It will
        ///     start a network request and fire the callback when completed.
        /// </summary>
        /// <param name="param"> Initialization parameters. </param>
        /// <param name="callback"> The completion callback. </param>
        public void Initialize(Parameters param, Action callback)
        {
            Cancel();

            _state    = State.Loading;
            _id       = param.Id;
            _request  = param.Fs.Request(MakeTileResource(param.MapId).GetUrl(), HandleTileResponse);
            _callback = callback;
        }
Exemple #15
0
        public Task <TResponse> SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            return(ExecuteScopeAsync(sp =>
            {
                var mediator = sp.GetService <IMediator>();

                return mediator.SendAsync(request);
            }));
        }
        public async Task <TResult> Handle <TResult>(IAsyncRequest <TResult> request)
        {
            var genericRequestHandler = typeof(IAsyncRequestHandler <,>);
            var handlerType           = genericRequestHandler.MakeGenericType(request.GetType(), typeof(TResult));

            var handler = _handlerFactory(handlerType);

            return(await(Task <TResult>) handler.GetType().GetMethod("Handle").Invoke(handler, new object[] { request }));
        }
Exemple #17
0
        public Task <TResponse> SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            var defaultHandler = GetHandler(request);

            RequestHandlerDelegate <TResponse> invokeHandler = () => defaultHandler.Handle(request);

            var pipeline = GetPipeline(request, invokeHandler);

            return(pipeline);
        }
Exemple #18
0
        public async Task <IActionResult> InvokeHandlerAsync(IAsyncRequest request)
        {
            var actionResultSource = _serviceProvider.GetRequiredService <IActionResultSource>();

            await _querier.InvokeHandlerAsync(request);

            var actionResult = actionResultSource.ActionResult;

            return(actionResult ?? new NoContentResult());
        }
Exemple #19
0
        /// <summary>
        ///     Cancels the request for the <see cref="T:Mapbox.Map.Tile"/> object.
        ///     It will stop a network request and set the tile's state to Canceled.
        /// </summary>
        /// <example>
        /// <code>
        /// // Do not request tiles that we are already requesting
        ///	// but at the same time exclude the ones we don't need
        ///	// anymore, cancelling the network request.
        ///	tiles.RemoveWhere((T tile) =>
        ///	{
        ///		if (cover.Remove(tile.Id))
        ///		{
        ///			return false;
        ///		}
        ///		else
        ///		{
        ///			tile.Cancel();
        ///			NotifyNext(tile);
        ///			return true;
        ///     }
        ///	});
        /// </code>
        /// </example>
        public void Cancel()
        {
            if (_request != null)
            {
                _request.Cancel();
                _request = null;
            }

            _state = State.Canceled;
        }
Exemple #20
0
        /// <summary>
        ///     Cancels the request for the <see cref="T:Mapbox.Map.Tile"/> object.
        ///     It will stop a network request and set the tile's state to Canceled.
        /// </summary>
        /// <example>
        /// <code>
        /// // Do not request tiles that we are already requesting
        ///	// but at the same time exclude the ones we don't need
        ///	// anymore, cancelling the network request.
        ///	this.tiles.RemoveWhere((T tile) =>
        ///	{
        ///		if (cover.Remove(tile.Id))
        ///		{
        ///			return false;
        ///		}
        ///		else
        ///		{
        ///			tile.Cancel();
        ///			this.NotifyNext(tile);
        ///			return true;
        ///     }
        ///	});
        /// </code>
        /// </example>
        public void Cancel()
        {
            if (this.request != null)
            {
                this.request.Cancel();
                this.request = null;
            }

            this.state = State.Canceled;
        }
Exemple #21
0
        public async Task <Message> RequestAsync(Message message, TimeSpan timeout)
        {
            if (message == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
            }

            if (timeout < TimeSpan.Zero)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
                          new ArgumentOutOfRangeException("timeout", timeout, SR.SFxTimeoutOutOfRange0));
            }

            ThrowIfDisposedOrNotOpen();

            AddHeadersTo(message);
            IAsyncRequest request = CreateAsyncRequest(message);

            TrackRequest(request);
            try
            {
                Message       reply;
                TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);

                TimeSpan savedTimeout = timeoutHelper.RemainingTime();
                try
                {
                    await request.SendRequestAsync(message, timeoutHelper);
                }
                catch (TimeoutException timeoutException)
                {
                    throw TraceUtility.ThrowHelperError(new TimeoutException(SR.Format(SR.RequestChannelSendTimedOut, savedTimeout),
                                                                             timeoutException), message);
                }

                savedTimeout = timeoutHelper.RemainingTime();

                try
                {
                    reply = await request.ReceiveReplyAsync(timeoutHelper);
                }
                catch (TimeoutException timeoutException)
                {
                    throw TraceUtility.ThrowHelperError(new TimeoutException(SR.Format(SR.RequestChannelWaitForReplyTimedOut, savedTimeout),
                                                                             timeoutException), message);
                }

                return(reply);
            }
            finally
            {
                ReleaseRequest(request);
            }
        }
Exemple #22
0
        public IAsyncRequest CompleteRequest(int transactionId)
        {
            if (transactionId == 0) // Exception based callback. No pending requests.
            {
                return(null);
            }
            IAsyncRequest request = _slots.Remove(transactionId - 1);

            Log.TraceFormat("Request removed. Transaction id: {0}", transactionId);
            return(request);
        }
        public async Task <ValidatedResult <TResponse> > SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            using (LoggerContext.DecorateWithUser())
            {
                _logger.Debug("Send {@request} for {User}", request);
            }

            var validationSummary = _requestValidator.Validate(request);

            return(await GetValidatedResultAsync(request, validationSummary));
        }
Exemple #24
0
        public static async Task CatchException <T>(this IAsyncRequest <T> command, TestContextFixture testContextFixture, Type exception)
        {
            try
            {
                await testContextFixture.SendAsync(command);
            }

            catch (Exception p)
            {
                p.ShouldBeOfType(exception);
            }
        }
        public async Task <TResponse> SendAsync <TResponse>(IAsyncRequest <TResponse> request)
        {
            var response = default(TResponse);

            await ExecuteScopeAsync(async sp =>
            {
                var mediator = sp.GetService <IMediator>();
                response     = await mediator.SendAsync(request);
            });

            return(response);
        }
Exemple #26
0
 public async Task <Message> RouteShouldPass <TResp>(
     IAsyncRequest <TResp> request, string resourceUri)
 {
     using (WebApp.Start(BaseAddress, Configuration))
     {
         return(await _mediator.PostAsync <Message, Message>(new Message(request), post =>
         {
             post.BaseAddress = BaseAddress;
             post.ResourceUri = resourceUri;
             post.TypeNameHandling = true;
         }));
     }
 }
        public static IAsyncResult BeginSendRequest <TRequest>(this IEndpoint endpoint, TRequest message, IServiceBus bus,
                                                               AsyncCallback callback, object state, Action <IInlineRequestConfigurator <TRequest> > configureCallback)
            where TRequest : class
        {
            var configurator = new InlineRequestConfigurator <TRequest>(message);

            configureCallback(configurator);
            IAsyncRequest <TRequest> request = configurator.Build(bus);

            endpoint.Send(message, context => configurator.ApplyContext(context, bus.Endpoint.Address.Uri));

            return(request.BeginAsync(callback, state));
        }
        public void Cancel()
        {
            IAsyncRequest request = _fs.Request(
                _mockBaseUrl + _testUrl.cancel
                , (Response r) => {
                Assert.IsTrue(r.HasError);
            }
                );

            request.Cancel();

            _fs.WaitForAllRequests();
        }
        public virtual void Enqueue <T>(IAsyncRequest <T> command, AppContext appContext)
        {
            if (_settings.IsDisabled)
            {
                return;
            }

            CreateCollection();
            var queueJob   = new QueueJob(command, appContext);
            var collection = _database.GetCollection <QueueJob>(_settings.CollectionName);

            collection.Insert(queueJob);
        }
Exemple #30
0
        public override async Task <TResponseData> SendAsync <TResponseData>(IAsyncRequest <TResponseData> request)
        {
            if (!(request is IRequireApiSession))
            {
                return(await base.SendAsync(request).ConfigureAwait(false));
            }
            using (var scope = await _scopeFactory.StartSession().ConfigureAwait(false)) {
                var response = await base.SendAsync(request).ConfigureAwait(false);

                await scope.Close().ConfigureAwait(false);

                return(response);
            }
        }
        public static bool PublishRequest <TRequest>(this IServiceBus bus, TRequest message,
                                                     Action <IInlineRequestConfigurator <TRequest> > configureCallback)
            where TRequest : class
        {
            var configurator = new InlineRequestConfigurator <TRequest>(message);

            configureCallback(configurator);

            IAsyncRequest <TRequest> request = configurator.Build(bus);

            bus.Publish(message, context => configurator.ApplyContext(context, bus.Endpoint.Address.Uri));

            return(request.Wait());
        }
Exemple #32
0
        public async Task<IAsyncResponse> ExecuteRequestAsync(IAsyncRequest request)
        {
            _log.DebugFormat("Started executing async request : {0}, Id - {1} @ {2}", request.GetType().Name, request.Id, DateTime.Now);

            var requestType = request.GetType();
            var responseType = _requestResponseService.GetMatchingAsyncResponseType(requestType);

            var requestHandlerType = typeof (IAsyncRequestHandler<,>).MakeGenericType(requestType, responseType);

            var requestHandler = (IAsyncRequestHandler) IoC.Container.Resolve(requestHandlerType);

            var response = await requestHandler.ExecuteAsync(request);

            _log.DebugFormat("Finished executing async request : {0}, Id - {1} @ {2}", request.GetType().Name, request.Id, DateTime.Now);

            return response;
        }
        public void AddRequest(IAsyncRequest request)
        {
            if (!IsConnected)
            {
                throw new Exception("Not connected");
            }
            int slot = _slots.TryAdd(request, OpcConfiguration.RequestTimeout);
            if (slot == -1) // all slots occupied.
            {
                throw new Exception("Exceeded limit of pending requests.");
            }

            request.OnAdded(this, slot + 1);
            // set transaction id to 1-based slot number. 0 is special case for exception based updates.
            Log.TraceFormat("Request added. Transaction id: {0}", request.TransactionId);
        }