Esempio n. 1
0
        public static UpdateAvailabilityList GetListFromLastUpdatesList(List <DateTime> datesList, int max, int recommended, TimeSpan cooldown)
        {
            UpdateAvailabilityList result = new UpdateAvailabilityList {
                maxUpdates         = max,
                recommendedUpdates = recommended,
            };
            DateTime startingNow = DateTime.Now;

            if (datesList == null || datesList.Count == 0)
            {
                datesList = new List <DateTime>();
            }
            else
            {
                for (int i = 0; i < datesList.Count; i++)
                {
                    if (startingNow - datesList[i] > cooldown)
                    {
                        result.maxUpdates         = max - (Math.Min(max, i));
                        result.recommendedUpdates = recommended - Math.Min(recommended, i);
                        break;
                    }
                }
            }
            return(result);
        }
Esempio n. 2
0
 public static UpdateAvailabilityList GetInstanceAvailableUpdates(Instance instance)
 {
     if (instance.retryAt >= DateTime.Now)
     {
         return(UpdateAvailabilityList.FactoryZeroUpdatesLeft());
     }
     return(GetListFromLastUpdatesList(
                datesList: instance.Last30Updates,
                max: maxInstanceUpdatesPerSecond,
                recommended: recommendedInstanceUpdatesPerSecond,
                cooldown: TimeSpan.FromSeconds(1)));
 }
Esempio n. 3
0
        public static bool DoUpdate(UpdateAvailabilityList updateAvailabilityList, int messageTextLength, bool necessary = false)
        {
            int updateWeight = IsFatUpdate(messageTextLength: messageTextLength) ? 4 : 1;

            if (necessary)
            {
                return(updateAvailabilityList.maxUpdates >= updateWeight);
            }
            else
            {
                return(updateAvailabilityList.recommendedUpdates >= updateWeight);
            }
        }