Rate Limiting in UnrealScript

Here’s the translation of the Go rate limiting example to UnrealScript, formatted in Markdown suitable for Hugo:

Rate limiting is an important mechanism for controlling resource utilization and maintaining quality of service. UnrealScript supports rate limiting through timers and events.

class RateLimiter extends Actor;

var int RequestCounter;
var float TimerInterval;
var array<int> Requests;
var array<int> BurstyRequests;

function BeginPlay()
{
    super.BeginPlay();
    
    // Set up the basic rate limiter
    TimerInterval = 0.2; // 200 milliseconds
    SetTimer(TimerInterval, true, 'ProcessRequest');

    // Fill up the requests
    for (RequestCounter = 1; RequestCounter <= 5; RequestCounter++)
    {
        Requests[Requests.Length] = RequestCounter;
    }

    // Set up the bursty rate limiter
    SetTimer(TimerInterval, true, 'ProcessBurstyRequest');

    // Fill up the bursty requests
    for (RequestCounter = 1; RequestCounter <= 5; RequestCounter++)
    {
        BurstyRequests[BurstyRequests.Length] = RequestCounter;
    }
}

function ProcessRequest()
{
    if (Requests.Length > 0)
    {
        `log("Request" @ Requests[0] @ "at" @ WorldInfo.TimeSeconds);
        Requests.Remove(0, 1);
    }
}

function ProcessBurstyRequest()
{
    local int i;
    local int BurstLimit;

    BurstLimit = Min(3, BurstyRequests.Length);

    for (i = 0; i < BurstLimit; i++)
    {
        if (BurstyRequests.Length > 0)
        {
            `log("Bursty Request" @ BurstyRequests[0] @ "at" @ WorldInfo.TimeSeconds);
            BurstyRequests.Remove(0, 1);
        }
    }
}

In this UnrealScript example, we simulate rate limiting using timers. The ProcessRequest function is called every 200 milliseconds, processing one request at a time. This limits the rate to approximately 5 requests per second.

For the bursty rate limiter, we use the ProcessBurstyRequest function. It allows up to 3 requests to be processed immediately, then continues at the same rate of 5 requests per second.

To run this code, you would typically place it in a file named RateLimiter.uc in your UnrealScript project. The UnrealScript compiler would compile it along with your other game code.

When executed, you would see output similar to this:

Request 1 at 0.200
Request 2 at 0.400
Request 3 at 0.600
Request 4 at 0.800
Request 5 at 1.000
Bursty Request 1 at 1.200
Bursty Request 2 at 1.200
Bursty Request 3 at 1.200
Bursty Request 4 at 1.400
Bursty Request 5 at 1.600

Note that UnrealScript doesn’t have built-in channels or goroutines like Go does. Instead, we use UnrealScript’s event-driven programming model with timers to achieve similar functionality. The concept of rate limiting remains the same, but the implementation details differ to fit UnrealScript’s paradigms.