Create Ratelimit.js
This commit is contained in:
parent
51c175691b
commit
5ec06bab57
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
var RateLimit = function(interval_ms) {
|
||||||
|
this._interval_ms = interval_ms || 0; // (0 means no limit)
|
||||||
|
this._after = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
RateLimit.prototype.attempt = function(time) {
|
||||||
|
var time = time || Date.now();
|
||||||
|
if(time < this._after) return false;
|
||||||
|
this._after = time + this._interval_ms;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
RateLimit.prototype.setInterval = function(interval_ms) {
|
||||||
|
this._after += interval_ms - this._interval_ms;
|
||||||
|
this._interval_ms = interval_ms;
|
||||||
|
};
|
||||||
|
|
||||||
|
var RateLimitChain = function(num, interval_ms) {
|
||||||
|
this.setNumAndInterval(num, interval_ms);
|
||||||
|
};
|
||||||
|
|
||||||
|
RateLimitChain.prototype.attempt = function(time) {
|
||||||
|
var time = time || Date.now();
|
||||||
|
for(var i = 0; i < this._chain.length; i++) {
|
||||||
|
if(this._chain[i].attempt(time)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
RateLimitChain.prototype.setNumAndInterval = function(num, interval_ms) {
|
||||||
|
this._chain = [];
|
||||||
|
for(var i = 0; i < num; i++) {
|
||||||
|
this._chain.push(new RateLimit(interval_ms));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var exports = typeof module !== "undefined" ? module.exports : this;
|
||||||
|
exports.RateLimit = RateLimit;
|
||||||
|
exports.RateLimitChain = RateLimitChain;
|
Loading…
Reference in New Issue