Exemple #1
0
        public static async Task SendNotification([ActivityTrigger] NotificationParameters parameters)
        {
            var timeToLeave    = parameters.DestinationTime - TimeSpan.FromSeconds(parameters.TimeToDestination);
            var minutesToLeave = (timeToLeave - parameters.CurrentTime).TotalMinutes;

            var message     = $"Leave in {(int)minutesToLeave} minutes to hit 66 route at {parameters.DestinationTime.ToString(@"hh\:mm")}.";
            var queueClient = new QueueClient(Settings.NotificationQueueConnection, Settings.NotificationQueueName);
            await queueClient.SendAsync(new Message(Encoding.UTF8.GetBytes(message)));

            await queueClient.CloseAsync();
        }
Exemple #2
0
        public static async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
        {
            log.LogInformation("Traffic monitoring started.");

            var      parameters  = context.GetInput <MonitoringOrchestrationParameters>();
            TimeSpan currentTime = GetCurrentTime(context);

            while (currentTime < parameters.TimerExpirationTime)
            {
                var timeToDestination = await context.CallActivityAsync <int>("func-getcommutetime", null);

                var timeToLeave = parameters.DestinationArrivalTime - TimeSpan.FromSeconds(timeToDestination + parameters.NotificationPeriod);
                log.LogInformation("Current time {currentTime}; time to leave {timeToLeave}.", currentTime, timeToLeave);

                if (currentTime > timeToLeave)
                {
                    var input = new NotificationParameters
                    {
                        CurrentTime       = currentTime,
                        DestinationTime   = parameters.DestinationArrivalTime,
                        TimeToDestination = timeToDestination
                    };
                    await context.CallActivityAsync <NotificationParameters>("func-sendnotification", input);

                    return;
                }

                var nextCheckTime = context.CurrentUtcDateTime.AddSeconds(parameters.CheckInterval);
                log.LogInformation("Schedule next timer job at {nextCheckTime}.", nextCheckTime);
                await context.CreateTimer(nextCheckTime, CancellationToken.None);

                currentTime = GetCurrentTime(context);
            }

            log.LogError("Orchestration finished due expiration time. Current time = {currentTime}, Timeout = {timeout}.", currentTime, parameters.TimerExpirationTime);
        }