RateLimitHandler class
Пакет: com.hypixel.hytale.server.core.io.netty
Файл: com/hypixel/hytale/server/core/io/netty/RateLimitHandler.java
extends: ChannelInboundHandlerAdapter
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
long |
var1 |
|
long |
var3 |
|
long |
var5 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
channelReadvoid channelRead(ChannelHandlerContext var1, Object var2) |
|
|
if if(var5 > 0L) |
|
|
if if(this.tokens > 0) |
private |
void |
refillTokensvoid refillTokens() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.io.netty;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.connection.QuicApplicationErrorCode;
class="kw">import io.netty.channel.ChannelHandlerContext;
class="kw">import io.netty.channel.ChannelInboundHandlerAdapter;
class="kw">import java.util.logging.Level;
class="kw">public class RateLimitHandler class="kw">extends ChannelInboundHandlerAdapter {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final int maxTokens;
class="kw">private class="kw">final int refillRate;
class="kw">private int tokens;
class="kw">private long lastRefillTime;
class="kw">public RateLimitHandler(int var1, int var2) {
this.maxTokens = var1;
this.refillRate = var2;
this.tokens = var1;
this.lastRefillTime = System.nanoTime();
}
class="kw">private void refillTokens() {
long var1 = System.nanoTime();
long var3 = var1 - this.lastRefillTime;
long var5 = var3 * this.refillRate / 1000000000L;
if (var5 > 0L) {
this.tokens = (int)Math.min(this.maxTokens, this.tokens + var5);
this.lastRefillTime = var1;
}
}
class="kw">public void channelRead(ChannelHandlerContext var1, Object var2) {
this.refillTokens();
if (this.tokens > 0) {
this.tokens--;
var1.fireChannelRead(var2);
} else {
LOGGER.at(Level.WARNING).log("Rate limit exceeded for %s, disconnecting", NettyUtil.formatRemoteAddress(var1.channel()));
NettyUtil.closeApplicationConnection(var1.channel(), QuicApplicationErrorCode.RateLimited);
}
}
}