5#include "CoreMinimal.h"
38 static constexpr int32 TripWireTimeFrameSeconds = 60;
41 static constexpr int32 MaxRequestsPerTripWireTimeFrame = 280;
44 static constexpr int32 SecondsPerBucket = 5;
51 static constexpr float AllowXPercentOfTripWireMaxForMovingAverage = 0.8f;
54 static constexpr int32 CountMovingAverageAcrossNTripWireTimeFrames = 3;
61 static constexpr int32 BucketsPerTimeFrame = TripWireTimeFrameSeconds / SecondsPerBucket;
64 static constexpr int32 RateLimitMovingAverageBucketCount = CountMovingAverageAcrossNTripWireTimeFrames * BucketsPerTimeFrame;
70 static constexpr int32 MaxRequestsPerBucketOnMovingAverage =
71 (MaxRequestsPerTripWireTimeFrame * 4) / (BucketsPerTimeFrame * 5);
121 bool bEnableRateLimiter =
true;
127 bool bFirstRequestSent =
false;
130 int32 Buckets[RateLimitMovingAverageBucketCount];
133 int32 LastBucket = -1;
139 int32 TotalRequestsInBuckets = 0;
142 int32 TotalRequestsInBucketsInTripWireTimeFrame = 0;
145 bool bIsRateLimited =
false;
156 int32 MoveCurrentBucket(
const FDateTime& Now);
Client-side rate limiter for the LootLocker HTTP execution queue.
Definition LootLockerRateLimiter.h:31
int32 GetSecondsLeftOfRateLimit() const
Returns the approximate number of seconds until the rate limit clears.
void Reset()
Resets all rate-limiting state to its initial values.
FDateTime RateLimitResolvesAt
Wall-clock time at which the current rate limit is expected to clear.
Definition LootLockerRateLimiter.h:148
FDateTime LastBucketChangeTime
Wall-clock time at which the current bucket became active.
Definition LootLockerRateLimiter.h:136
virtual ~FLootLockerRateLimiter()=default
virtual bool AddRequestAndCheckIfRateLimitHit()
Records one outgoing request and returns whether the rate limit is currently active.
virtual FDateTime GetTimeNow() const
Returns the current wall-clock time used for bucket advancement.