public AccountRequestCounter(Account _account, RequestRateLimits requestRateLimits) { account = _account ?? throw new ArgumentNullException(nameof(_account)); minuteCounter = new RequestCounter(); hourCounter = new RequestCounter(); SetLimits(requestRateLimits); }
private bool IncSingleCounter(RequestCounter counter, long counterWindowPeriod, uint maxAllowedRequestsCount, long requestDatetime, out string error) { error = null; if ((counter.StartedAt + counterWindowPeriod) < requestDatetime) //window is expired { counter.Reset(requestDatetime); } if (counter.Count + 1 > maxAllowedRequestsCount) { error = $"Too many requests. Max allowed request count is {maxAllowedRequestsCount} per {counterWindowPeriod/10_000}ms."; return(false); } counter.IncRequestsCount(); return(true); }