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