Ejemplo n.º 1
0
        /// <exception cref="OverflowException"></exception>
        private void ProcessTriggerItem(SettingsCleanupTriggerItem item)
        {
            if (_triggerdItem != null && _triggerdItem != item)
            {
                return;
            }

            if (_triggerdItem == null)
            {
                // Increase to 5 minutes
                if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(5))
                {
                    item.LastRan = DateTime.Now;
                    string command = string.Format("{0} quiet", item.ScanCommand);
                    HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command);
                    if (entities.Count >= item.MaxCapacity)
                    {
                        Communication.SendPublicInformation(string.Format("[NOTICE]: Cleanup triggered.  ({0} of {1}) triggered grids found.  Cleanup will run in {2} minutes.  Reason: {3}", entities.Count, item.MaxCapacity, item.MinutesAfterCapacity, item.Reason));
                        item.NotificationItemsRan.Clear( );
                        _triggerdItem = item;
                        return;
                    }
                }
            }
            else
            {
                if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(item.MinutesAfterCapacity))
                {
                    string command = string.Format("{0} quiet", item.ScanCommand);
                    HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command);
                    CubeGrids.DeleteGrids(entities);
                    Communication.SendPublicInformation(string.Format("[NOTICE]: Triggered cleanup has run.  {0} entities removed.  Have a nice day.", entities.Count));
                    _triggerdItem = null;
                    return;
                }

                foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
                {
                    if (item.NotificationItemsRan.Contains(notifyItem))
                    {
                        continue;
                    }

                    if (notifyItem.MinutesBeforeCleanup > item.MinutesAfterCapacity)
                    {
                        continue;
                    }

                    if (DateTime.Now - item.LastRan > TimeSpan.FromMinutes(item.MinutesAfterCapacity - notifyItem.MinutesBeforeCleanup))
                    {
                        item.NotificationItemsRan.Add(notifyItem);
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }
        /// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            _start = DateTime.Now;             // this needs to be updated for each run so multi-day runtimes are handled properly

            DateTime itemTime = new DateTime(_start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0);

            if (DateTime.Now - itemTime > _twentySeconds)
            {
                itemTime = itemTime.AddDays(1);
            }

            if (DateTime.Now - item.LastRan < _oneMinute)
            {
                return;
            }

            if (itemTime - DateTime.Now < _oneSecond && DateTime.Now - item.LastRan > _oneMinute)
            {
                string command = string.Format("{0} quiet", item.ScanCommand);
                HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, CommandParser.GetCommandParts(command).ToArray( ));
                CubeGrids.DeleteGrids(entities);
                Communication.SendPublicInformation(string.Format("[NOTICE]: Timed cleanup has run.  {0} entities removed.  Have a nice day.", entities.Count));
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
            {
                if (item.NotificationItemsRan.Contains(notifyItem))
                {
                    continue;
                }

                if (itemTime - DateTime.Now < TimeSpan.FromMinutes(notifyItem.MinutesBeforeCleanup))
                {
                    item.NotificationItemsRan.Add(notifyItem);

                    if (DateTime.Now - notifyItem.lastRan > _oneMinute)
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <exception cref="OverflowException"></exception>
        private void ProcessTimedItem(SettingsCleanupTimedItem item)
        {
            DateTime time = new DateTime(_start.Year, _start.Month, _start.Day, item.Restart.Hour, item.Restart.Minute, 0);

            if (time - DateTime.Now < TimeSpan.FromSeconds(-20))
            {
                time = new DateTime(_start.Year, _start.Month, _start.Day + 1, item.Restart.Hour, item.Restart.Minute, 0);
            }

            if (DateTime.Now - item.LastRan < TimeSpan.FromMinutes(1))
            {
                return;
            }

            if (time - DateTime.Now < TimeSpan.FromSeconds(1) && DateTime.Now - item.LastRan > TimeSpan.FromMinutes(1))
            {
                string command = string.Format("{0} quiet", item.ScanCommand);
                HashSet <IMyEntity> entities = CubeGrids.ScanGrids(0, command);
                CubeGrids.DeleteGrids(entities);
                Communication.SendPublicInformation(string.Format("[NOTICE]: Timed cleanup has run.  {0} entities removed.  Have a nice day.", entities.Count));
                item.LastRan = DateTime.Now;
                item.NotificationItemsRan.Clear( );
                return;
            }

            foreach (SettingsCleanupNotificationItem notifyItem in PluginSettings.Instance.CleanupNotificationItems)
            {
                if (item.NotificationItemsRan.Contains(notifyItem))
                {
                    continue;
                }

                if (time - DateTime.Now < TimeSpan.FromMinutes(notifyItem.MinutesBeforeCleanup))
                {
                    item.NotificationItemsRan.Add(notifyItem);

                    if (DateTime.Now - notifyItem.lastRan > TimeSpan.FromMinutes(1))
                    {
                        notifyItem.lastRan = DateTime.Now;
                        string notification = notifyItem.Message.Replace("%cleanup_reason%", item.Reason);
                        Communication.SendPublicInformation(notification);
                    }
                }
            }
        }