discord-rpc/src/backoff.h

39 lines
747 B
C
Raw Normal View History

2017-07-18 11:10:39 -07:00
#pragma once
#include <stdint.h>
#include <algorithm>
#include <random>
2017-07-25 09:27:48 -07:00
struct Backoff {
2017-07-18 11:10:39 -07:00
int64_t minAmount;
int64_t maxAmount;
int64_t current;
int fails;
std::mt19937_64 randGenerator;
std::uniform_real_distribution<> randDistribution;
2017-07-25 09:27:48 -07:00
double rand01() { return randDistribution(randGenerator); }
2017-07-18 11:10:39 -07:00
Backoff(int64_t min, int64_t max)
2017-07-25 09:27:48 -07:00
: minAmount(min)
, maxAmount(max)
, current(min)
, fails(0)
{
}
2017-07-18 11:10:39 -07:00
void reset()
{
fails = 0;
current = minAmount;
}
int64_t nextDelay()
{
++fails;
int64_t delay = (int64_t)((double)current * 2.0 * rand01());
current = std::min(current + delay, maxAmount);
return current;
}
};