VoicePlayerState class

Пакет: com.hypixel.hytale.server.core.modules.voice

Файл: com/hypixel/hytale/server/core/modules/voice/VoicePlayerState.java

Поля (7)

МодификаторыТипИмя
final long MILLISECONDS_PER_SECOND
long var1
int var2
long var3
long var4
long var5
double var7

Методы (22)

МодификаторыВозвратСигнатура
synchronized boolean checkRateLimitboolean checkRateLimit(int var1, int var2)
public int getConsecutiveErrorsint getConsecutiveErrors()
public long getLastPacketTimelong getLastPacketTime()
public int getSpeakingStateChangesint getSpeakingStateChanges()
public String getStatsStringString getStatsString()
public double getTokenBucketdouble getTokenBucket()
public long getTotalPacketsRateLimitedlong getTotalPacketsRateLimited()
public long getTotalPacketsReceivedlong getTotalPacketsReceived()
if if(this.isSpeaking != var1)
if if(var5 > 0L)
if if(var7 >= 1.0)
if if(this.tokenBucket < 1.0)
if if(var1 - this.lastRateLimitLogTime >= 10000L)
public int incrementConsecutiveErrorsint incrementConsecutiveErrors()
public boolean isRoutingDisabledboolean isRoutingDisabled()
public boolean isSilencedboolean isSilenced()
public boolean isSpeakingboolean isSpeaking()
public void resetConsecutiveErrorsvoid resetConsecutiveErrors()
public void setRoutingDisabledvoid setRoutingDisabled(boolean var1)
public void setSilencedvoid setSilenced(boolean var1)
public void setSpeakingvoid setSpeaking(boolean var1)
synchronized boolean shouldLogRateLimitboolean shouldLogRateLimit()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.voice;

class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.concurrent.atomic.AtomicLong;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class VoicePlayerState {
   class="kw">private class="kw">static class="kw">final long MILLISECONDS_PER_SECOND = 1000L;
   class="kw">private class="kw">static class="kw">final long RATE_LIMIT_LOG_THROTTLE_MS = 10000L;
   class="kw">static class="kw">final int MAX_CONSECUTIVE_ERRORS = 10;
   class="kw">private class="kw">final UUID playerId;
   class="kw">private class="kw">final HytaleLogger logger;
   class="kw">private class="kw">volatile boolean isSpeaking;
   class="kw">private class="kw">volatile boolean silenced = false;
   class="kw">private class="kw">volatile long lastPacketTime;
   class="kw">private class="kw">volatile double tokenBucket;
   class="kw">private class="kw">volatile long lastTokenRefillTime;
   class="kw">private class="kw">volatile long lastRateLimitLogTime;
   class="kw">private class="kw">final AtomicLong totalPacketsReceived = new AtomicLong();
   class="kw">private class="kw">final AtomicLong totalPacketsRateLimited = new AtomicLong();
   class="kw">private class="kw">final AtomicInteger speakingStateChanges = new AtomicInteger();
   class="kw">private class="kw">final AtomicInteger consecutiveErrors = new AtomicInteger();
   class="kw">private class="kw">volatile boolean routingDisabled = false;

   class="kw">public VoicePlayerState(@Nonnull UUID var1, @Nonnull HytaleLogger var2, int var3) {
      this.playerId = var1;
      this.logger = var2;
      long var4 = System.currentTimeMillis();
      this.lastTokenRefillTime = var4;
      this.tokenBucket = var3;
   }

   @Nonnull
   class="kw">public UUID getPlayerId() {
      class="kw">return this.playerId;
   }

   class="kw">public boolean isSpeaking() {
      class="kw">return this.isSpeaking;
   }

   class="kw">public void setSpeaking(boolean var1) {
      if (this.isSpeaking != var1) {
         int var2 = this.speakingStateChanges.incrementAndGet();
         this.logger
            .at(Level.FINE)
            .log("[PlayerState] Speaking changed: player=%s, speaking=%s -> %s, totalChanges=%d", this.playerId, this.isSpeaking, var1, var2);
      }

      this.isSpeaking = var1;
   }

   class="kw">public boolean isSilenced() {
      class="kw">return this.silenced;
   }

   class="kw">public void setSilenced(boolean var1) {
      this.silenced = var1;
   }

   class="kw">public boolean isRoutingDisabled() {
      class="kw">return this.routingDisabled;
   }

   class="kw">public void setRoutingDisabled(boolean var1) {
      this.routingDisabled = var1;
   }

   class="kw">public int incrementConsecutiveErrors() {
      class="kw">return this.consecutiveErrors.incrementAndGet();
   }

   class="kw">public void resetConsecutiveErrors() {
      this.consecutiveErrors.set(0);
   }

   class="kw">public int getConsecutiveErrors() {
      class="kw">return this.consecutiveErrors.get();
   }

   class="kw">public class="kw">synchronized boolean checkRateLimit(int var1, int var2) {
      long var3 = System.currentTimeMillis();
      long var5 = var3 - this.lastTokenRefillTime;
      if (var5 > 0L) {
         double var7 = var5 / 1000.0 * var1;
         this.tokenBucket = Math.min(var2, this.tokenBucket + var7);
         this.lastTokenRefillTime = var3;
         if (var7 >= 1.0) {
            this.logger.at(Level.FINEST).log("[PlayerState] TokenRefill: player=%s, tokensAdded=%.2f, bucket=%.2f", this.playerId, var7, this.tokenBucket);
         }
      }

      this.totalPacketsReceived.incrementAndGet();
      if (this.tokenBucket < 1.0) {
         this.totalPacketsRateLimited.incrementAndGet();
         class="kw">return false;
      } else {
         this.tokenBucket--;
         this.lastPacketTime = var3;
         class="kw">return true;
      }
   }

   class="kw">public class="kw">synchronized boolean shouldLogRateLimit() {
      long var1 = System.currentTimeMillis();
      if (var1 - this.lastRateLimitLogTime >= 10000L) {
         this.lastRateLimitLogTime = var1;
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public long getLastPacketTime() {
      class="kw">return this.lastPacketTime;
   }

   class="kw">public double getTokenBucket() {
      class="kw">return this.tokenBucket;
   }

   class="kw">public long getTotalPacketsReceived() {
      class="kw">return this.totalPacketsReceived.get();
   }

   class="kw">public long getTotalPacketsRateLimited() {
      class="kw">return this.totalPacketsRateLimited.get();
   }

   class="kw">public int getSpeakingStateChanges() {
      class="kw">return this.speakingStateChanges.get();
   }

   class="kw">public String getStatsString() {
      class="kw">return String.format(
         "packets=%d, rateLimited=%d, stateChanges=%d, routingErrors=%d",
         this.totalPacketsReceived.get(),
         this.totalPacketsRateLimited.get(),
         this.speakingStateChanges.get(),
         this.consecutiveErrors.get()
      );
   }
}