예제 #1
0
        public async void Post([FromBody] Services.Notification.NotificationSchedule value)
        {
            Logger.LogInformation($"Post Trigger for {value.SubscriberID} - {value.NotificationType}");
            try
            {
                var triggerCreator = new TriggerCreator(Scheduler);

                var trigger = await triggerCreator.FillTriggerAsync(value);

                await Scheduler.Standby();

                await Scheduler.ScheduleJob(trigger);

                // created trigger is not started, so need to do that:
                if (value.Enable)
                {
                    await Scheduler.ResumeTrigger(trigger.Key);
                }
                else
                {
                    await Scheduler.PauseTrigger(trigger.Key);
                }
            }
            finally
            {
                await Scheduler.Start();
            }
        }
예제 #2
0
        public async Task <ITrigger> FillTriggerAsync(Services.Notification.NotificationSchedule value)
        {
            DayOfWeek[] weekDays = new DayOfWeek[7];

            int i = 0;

            if (value.RunOnSunday)
            {
                weekDays[i++] = DayOfWeek.Sunday;
            }
            if (value.RunOnMonday)
            {
                weekDays[i++] = DayOfWeek.Monday;
            }
            if (value.RunOnTuesday)
            {
                weekDays[i++] = DayOfWeek.Tuesday;
            }
            if (value.RunOnWednesday)
            {
                weekDays[i++] = DayOfWeek.Wednesday;
            }
            if (value.RunOnThursday)
            {
                weekDays[i++] = DayOfWeek.Thursday;
            }
            if (value.RunOnFriday)
            {
                weekDays[i++] = DayOfWeek.Friday;
            }
            if (value.RunOnSaturday)
            {
                weekDays[i++] = DayOfWeek.Saturday;
            }

            if (await Scheduler.CheckExists(new TriggerKey(value.SubscriberID, value.NotificationType)) == true)
            {
                await Scheduler.DeleteJob(new JobKey(value.SubscriberID, value.NotificationType));
            }
            var k       = new TriggerKey(value.SubscriberID, value.NotificationType);
            var trigger = TriggerBuilder.Create()
                          .WithIdentity(k)
                          .WithSchedule(CronScheduleBuilder
                                        .AtHourAndMinuteOnGivenDaysOfWeek(value.RunOnHour, value.RunOnMinute, weekDays.Take(i).ToArray()))
                          .ForJob(new JobKey(value.NotificationType))
                          .Build();

            return(trigger);
        }