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); }
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))); }
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); } }