val tokensResetAt = AtomicLong(0)
onRequest { request, _ ->
- val requestDelay = calculateRateLimitDelayDouble(requestsRemaining.getAcquire(), requestsResetAt.getAcquire())
- val tokenDelay = request.attributes.getTokens()?.let { _ ->
- calculateRateLimitDelayDouble(tokensRemaining.getAcquire(), tokensResetAt.getAcquire())
+ val requestDelay = calculateRateLimitDelayDouble(requestsRemaining.getAndAdd(-1), requestsResetAt.get())
+ val tokenDelay = request.attributes.getTokens()?.let { tokens ->
+ calculateRateLimitDelayDouble(tokensRemaining.getAndAdd(-tokens), tokensResetAt.get())
}
combineDelays(requestDelay, tokenDelay)?.seconds?.let { delay(it) }
@Suppress("UastIncorrectHttpHeaderInspection")
onResponse { response ->
- val newRequestsRemaining = response.headers["X-Ratelimit-Remaining-Requests"]?.toIntOrNull() ?: -1
- val newRequestsResetAt = response.headers["X-Ratelimit-Reset-Requests"]?.parseDurationToSeconds()?.secondFromNow() ?: 0
- val newTokensRemaining = response.headers["X-Ratelimit-Remaining-Tokens"]?.toIntOrNull() ?: -1
- val newTokensResetAt = response.headers["X-Ratelimit-Reset-Tokens"]?.parseDurationToSeconds()?.secondFromNow() ?: 0
-
- requestsRemaining.setRelease(newRequestsRemaining)
- requestsResetAt.setRelease(newRequestsResetAt)
- tokensRemaining.setRelease(newTokensRemaining)
- tokensResetAt.setRelease(newTokensResetAt)
+ response.headers["X-Ratelimit-Remaining-Requests"]?.toIntOrNull()?.let(requestsRemaining::set)
+ response.headers["X-Ratelimit-Reset-Requests"]?.parseDurationToSeconds()?.secondFromNow()?.let(requestsResetAt::set)
+ response.headers["X-Ratelimit-Remaining-Tokens"]?.toIntOrNull()?.let(tokensRemaining::set)
+ response.headers["X-Ratelimit-Reset-Tokens"]?.parseDurationToSeconds()?.secondFromNow()?.let(tokensResetAt::set)
}
}