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);
      }
   }
}