Esempio n. 1
0
        public async Task HandleRequest([OrchestrationTrigger] IDurableOrchestrationContext orchestrationContext)
        {
            var input        = orchestrationContext.GetInput <ApiRequestDto>();
            var queueRequest = new QueueRequestDto
            {
                Name            = input.Name,
                OrchestrationId = orchestrationContext.InstanceId
            };

            await orchestrationContext.CallActivityAsync(nameof(HandleRequestEnqueue), queueRequest);

            var cancellationTokenSource = new CancellationTokenSource();

            var requestTask = orchestrationContext.WaitForExternalEvent <ApiReplyDto>(Constants.RequestProcessedEventName);
            var timeoutTask = orchestrationContext.CreateTimer(orchestrationContext.CurrentUtcDateTime.AddMinutes(5), cancellationTokenSource.Token);

            await Task.WhenAny(requestTask, timeoutTask);

            // Reply received
            if (requestTask.IsCompletedSuccessfully)
            {
                cancellationTokenSource.Cancel();
                orchestrationContext.SetOutput(requestTask.Result);
            }
            else
            {
                // Timeout
                orchestrationContext.SetOutput(new QueueReplyDto
                {
                    Name    = input.Name,
                    Success = false
                });
            }
        }
Esempio n. 2
0
        public ActionResult SyncPlayQueue(
            [FromBody, Required] QueueRequestDto requestData)
        {
            var currentSession  = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
            var syncPlayRequest = new QueueGroupRequest(requestData.ItemIds, requestData.Mode);

            _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None);
            return(NoContent());
        }