Пример #1
0
        /// <summary>
        /// Calculate the time until an automation event in milliseconds
        /// </summary>
        /// <param name="automationTime">Automation event</param>
        /// <returns>Time in milliseconds</returns>
        public double CalculateTime(AutomationTime automationTime)
        {
            DateTime nowTime     = DateTime.Now;
            DateTime restartTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, automationTime.Time.Hours, automationTime.Time.Minutes, 0);

            if (restartTime < nowTime)
            {
                restartTime = restartTime.AddDays(1);
            }
            return((restartTime - nowTime).TotalMilliseconds);
        }
Пример #2
0
 private void WriteAutomationInfo(AutomationTime automationTime, string time)
 {
     if (automationTime is RestartTime)
     {
         ApplicationManager.Instance.ActiveEntities[Server].StandardInput
         .WriteLineAsync("say Next server restart in " + time + "!");
     }
     else if (automationTime is StopTime)
     {
         ApplicationManager.Instance.ActiveEntities[Server].StandardInput
         .WriteLineAsync("say Server shutdown in " + time + "!");
     }
 }
Пример #3
0
        /// <summary>
        /// Dispose existing timers and set timer for the next automation event of a given server.
        /// This should be called every time the server status changes, or the settings change.
        /// </summary>
        /// <param name="viewModel"></param>
        public void UpdateAutomation(ServerViewModel viewModel)
        {
            DisposeAutomation(viewModel);

            AutomationTime nextAutomationTime = GetNextAutomation(viewModel);

            if (nextAutomationTime != null)
            {
                RegisterRestart(viewModel, nextAutomationTime);
            }

            viewModel.SetAutomationTime(nextAutomationTime);
        }
Пример #4
0
        private void RegisterRestart(ServerViewModel server, AutomationTime time)
        {
            double restartTime = CalculateTime(time);
            Timer  t           = new Timer(restartTime);

            //t.AutoReset = cyclic;
            t.Elapsed += async(sender, e) => await Task.Factory.StartNew(() => TimerElapsed(server, t, time));

            if (!Timers.ContainsKey(server))
            {
                Timers.Add(server, new List <Timer>());
            }
            Timers[server].Add(t);
            t.Start();
        }
Пример #5
0
        private AutomationTime GetNextAutomation(ServerViewModel server)
        {
            double                nextTimer     = double.MaxValue;
            AutomationTime        result        = null;
            List <AutomationTime> relevantTimes = GetRelevantTimes(server);

            foreach (AutomationTime automationTime in relevantTimes)
            {
                if (automationTime.Enabled)
                {
                    double t = CalculateTime(automationTime);
                    if (t < nextTimer)
                    {
                        nextTimer = t;
                        result    = automationTime;
                    }
                }
            }
            return(result);
        }
Пример #6
0
 private void TimerElapsed(ServerViewModel server, Timer t, AutomationTime time)
 {
     if (time is RestartTime)
     {
         TimerElapsedRestart(server);
     }
     else if (time is StopTime)
     {
         TimerElapsedStop(server);
     }
     else if (time is StartTime)
     {
         TimerElapsedStart(server);
     }
     if (!t.AutoReset)
     {
         t.Dispose();
         Timers[server].Remove(t);
     }
 }
Пример #7
0
        public void SetAutomationTime(AutomationTime automationTime)
        {
            restartTimer?.Dispose();
            AutomationEnabled = false;
            if (automationTime == null)
            {
                return;
            }

            if (automationTime is RestartTime)
            {
                NextAutomationName = "Restart";
            }
            else if (automationTime is StopTime)
            {
                NextAutomationName = "Shutdown";
            }
            else if (automationTime is StartTime)
            {
                NextAutomationName = "Starting";
            }

            TimeSpan timeSpan =
                TimeSpan.FromMilliseconds(ServerAutomationManager.Instance.CalculateTime(automationTime));

            AutomationEnabled     = true;
            NextAutomationHours   = timeSpan.Hours.ToString();
            NextAutomationMinutes = timeSpan.Minutes.ToString();
            NextAutomationSeconds = timeSpan.Seconds.ToString();

            new Thread(() =>
            {
                restartTimer = new Timer {
                    Interval = 1000
                };
                restartTimer.Elapsed += (sender, args) =>
                {
                    timeSpan              = timeSpan.Subtract(TimeSpan.FromMilliseconds(1000));
                    AutomationEnabled     = true;
                    NextAutomationHours   = timeSpan.Hours.ToString();
                    NextAutomationMinutes = timeSpan.Minutes.ToString();
                    NextAutomationSeconds = timeSpan.Seconds.ToString();
                    if (timeSpan.Hours == 0 && timeSpan.Minutes == 30 && timeSpan.Seconds == 0)
                    {
                        WriteAutomationInfo(automationTime, "30 minutes");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 5 && timeSpan.Seconds == 0)
                    {
                        WriteAutomationInfo(automationTime, "5 minutes");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 1 && timeSpan.Seconds == 0)
                    {
                        WriteAutomationInfo(automationTime, "1 minute");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 10)
                    {
                        WriteAutomationInfo(automationTime, "10 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 9)
                    {
                        WriteAutomationInfo(automationTime, "9 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 8)
                    {
                        WriteAutomationInfo(automationTime, "8 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 7)
                    {
                        WriteAutomationInfo(automationTime, "7 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 6)
                    {
                        WriteAutomationInfo(automationTime, "6 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 5)
                    {
                        WriteAutomationInfo(automationTime, "5 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 4)
                    {
                        WriteAutomationInfo(automationTime, "4 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 3)
                    {
                        WriteAutomationInfo(automationTime, "3 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 2)
                    {
                        WriteAutomationInfo(automationTime, "2 seconds");
                    }
                    else if (timeSpan.Hours == 0 && timeSpan.Minutes == 0 && timeSpan.Seconds == 1)
                    {
                        WriteAutomationInfo(automationTime, "1 seconds");
                    }
                };
                restartTimer.AutoReset = true;
                restartTimer.Enabled   = true;
            })
            {
                IsBackground = true
            }.Start();
        }