Exemplo n.º 1
0
        public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                var nextOccurrence              = _cron.GetNextOccurrence(DateTime.UtcNow);
                var timeUntilNextOccurrence     = nextOccurrence - DateTime.UtcNow;
                var waitUntilNextOccurrenceTask = Task.Delay(timeUntilNextOccurrence, cancellationToken);

                _logger.Waiting(timeUntilNextOccurrence);
                await waitUntilNextOccurrenceTask;

                await next(Signal.Static);
            }
        }
Exemplo n.º 2
0
        public sealed override async Task ExecuteAsync(SourceNextDelegate <T> next, CancellationToken cancellationToken)
        {
            var completion = new TaskCompletionSource();

            await using var cancellationRegistration = cancellationToken.Register(o =>
            {
                if (o is TaskCompletionSource tcs)
                {
                    tcs.SetResult();
                }
            }, completion);

            _router.AddRoute(ChainName, async httpContext =>
            {
                var request = httpContext.Request;
                if (!await Authorize(request))
                {
                    httpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
                    return;
                }

                var payload = await DeserializePayload(request);
                if (payload is null)
                {
                    httpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
                    return;
                }

                if (!await ValidatePayload(request, payload))
                {
                    httpContext.Response.StatusCode = StatusCodes.Status422UnprocessableEntity;
                    return;
                }

                httpContext.Response.StatusCode = StatusCodes.Status202Accepted;
                var _ = next(payload);
            });
            await completion.Task;

            _router.RemoveRoute(ChainName);
        }
Exemplo n.º 3
0
        public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                var nextOccurrence = _cron.GetNextOccurrence(DateTime.UtcNow);
                _logger.Waiting(nextOccurrence - DateTime.UtcNow);

                // Task.Delay is unreliable, ensure we wait until next occurrence
                do
                {
                    var delay             = nextOccurrence - DateTime.UtcNow;
                    var millisecondsDelay = (int)Math.Ceiling(delay.TotalMilliseconds);
                    if (millisecondsDelay > 0)
                    {
                        await Task.Delay(millisecondsDelay, cancellationToken);
                    }
                } while (DateTime.UtcNow < nextOccurrence);

                await next(Signal.Static);
            }
        }
Exemplo n.º 4
0
 public override Task ExecuteAsync(SourceNextDelegate <string> next, CancellationToken cancellationToken)
 {
     return(next(DateTime.Now.ToString(CultureInfo.InvariantCulture)));
 }
Exemplo n.º 5
0
 public abstract Task ExecuteAsync(SourceNextDelegate <TOutput> next, CancellationToken cancellationToken);
Exemplo n.º 6
0
 public override Task ExecuteAsync(SourceNextDelegate <T> next, CancellationToken cancellationToken)
 {
     throw new TestException();
 }
Exemplo n.º 7
0
 public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken)
 {
     await next(Signal.Static);
 }
Exemplo n.º 8
0
 public override Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken)
 {
     return(next(Signal.Static));
 }
Exemplo n.º 9
0
        public override async Task ExecuteAsync(SourceNextDelegate <Signal> next, CancellationToken cancellationToken)
        {
            await Task.Delay(Timeout.Infinite, cancellationToken);

            await base.ExecuteAsync(next, cancellationToken);
        }