private void StartTimer(ScheduledTaskInterval interval)
 {
     if (timer == null)
     {
         timer = new Timer();
     }
     timer.Interval = interval.Interval;
     timer.Elapsed += Timer_Elapsed;
     timer.Start();
 }
        public ScheduledTask(string taskName,
                             bool runOnServerStart, ScheduledTaskInterval interval, bool saveState = true)
        {
            TaskName         = taskName;
            Interval         = interval;
            SaveState        = saveState;
            RunOnServerStart = runOnServerStart;

            StartTimer(TryGetLastInterval());
        }
        public ScheduledTaskInterval TryGetLastInterval()
        {
            DateTime?nextEvent = ScheduleNextEventsRepository.Instance.GetNext(TaskName);
            ScheduledTaskInterval nextEventInterval = null;

            if (nextEvent != null)
            {
                var nextDate = (nextEvent - DateTime.Now);
                nextEventInterval = new ScheduledTaskInterval((int)nextDate.Value.Days,
                                                              (int)nextDate.Value.TotalHours, (int)nextDate.Value.TotalMinutes,
                                                              (int)nextDate.Value.TotalSeconds);

                if (nextEventInterval.Interval <= 0)
                {
                    nextEvent = null;
                }
            }

            return(nextEvent == null
                ? Interval
                : nextEventInterval);
        }
        internal void SetNext(string taskName, ScheduledTaskInterval baseInterval)
        {
            lock (locker)
            {
                DateTime nextEvent = DateTime.Now
                                     .AddDays(baseInterval.Days)
                                     .AddHours(baseInterval.Hours)
                                     .AddMinutes(baseInterval.Minutes)
                                     .AddSeconds(baseInterval.Seconds);

                var events = GetNextEvents();
                var evt    = events.FirstOrDefault(e => e.TaskName.Equals(taskName));
                if (evt == null)
                {
                    events.Add(new ScheduleNextEvent(taskName, nextEvent));
                }
                else
                {
                    evt.NextEvent = nextEvent;
                }

                SaveNextEvents(events);
            }
        }