LiveConfigService class
Пакет: com.hypixel.hytale.server.core.liveconfig
Файл: com/hypixel/hytale/server/core/liveconfig/LiveConfigService.java
Поля (21)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
yield |
null |
|
String |
var0 |
|
String |
var0 |
|
URI |
var10 |
|
String |
var11 |
|
String |
var11 |
|
Builder |
var12 |
|
HttpResponse |
var13 |
|
int |
var2 |
|
BsonDocument |
var2 |
|
BsonValue |
var2 |
|
String |
var3 |
|
Map |
var4 |
|
ServerAuthManager |
var6 |
|
String |
var7 |
|
BsonDocument |
var7 |
|
boolean |
var8 |
|
String |
var8 |
|
StringBuilder |
var9 |
|
Object |
var9 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
LiveConfigSnapshotreturn new LiveConfigSnapshot(var3, var11, var4) |
static |
boolean |
hasUrlOverrideboolean hasUrlOverride() |
|
|
if if(var5 != null) |
|
|
if if(var2 == 304) |
|
return |
switchreturn switch(var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.liveconfig;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.auth.AuthConfig;
class="kw">import com.hypixel.hytale.server.core.auth.ServerAuthManager;
class="kw">import com.hypixel.hytale.server.core.util.ServiceHttpClientFactory;
class="kw">import java.net.URI;
class="kw">import java.net.URLEncoder;
class="kw">import java.net.http.HttpClient;
class="kw">import java.net.http.HttpRequest;
class="kw">import java.net.http.HttpResponse;
class="kw">import java.net.http.HttpRequest.Builder;
class="kw">import java.net.http.HttpResponse.BodyHandlers;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.util.HashMap;
class="kw">import java.util.Locale;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;
class="kw">public class LiveConfigService {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static class="kw">final String URL_OVERRIDE_PROPERTY = "liveconfig.url";
class="kw">private class="kw">final HttpClient httpClient = ServiceHttpClientFactory.newBuilder(AuthConfig.HTTP_TIMEOUT).build();
class="kw">private class="kw">final String baseUrl = System.getProperty("liveconfig.url", "https://liveconfig.hytale.com");
class="kw">public LiveConfigService() {
}
class="kw">public class="kw">static boolean hasUrlOverride() {
class="kw">return System.getProperty("liveconfig.url") != null;
}
@Nullable
class="kw">public LiveConfigSnapshot fetchServerConfigs(@Nonnull String var1, @Nonnull String var2, @Nonnull String var3, @Nullable String var4, @Nullable String var5) {
ServerAuthManager var6 = ServerAuthManager.getInstance();
String var7 = var6.getSessionToken();
boolean var8 = hasUrlOverride();
if (var8 || var7 != null && !var7.isEmpty()) {
try {
StringBuilder var9 = new StringBuilder("?os=").append(encode(var2)).append("&arch=").append(encode(var3));
if (var4 != null && !var4.isEmpty()) {
var9.append("&version=").append(encode(var4));
}
URI var10 = URI.create(String.format("%s/server-configs/%s%s", this.baseUrl, var1, var9));
String var11 = var7 != null && !var7.isEmpty() ? var7 : "dev-test-token";
Builder var12 = HttpRequest.newBuilder()
.uri(var10)
.header("Authorization", "Bearer " + var11)
.header("User-Agent", AuthConfig.USER_AGENT)
.header("Accept", "application/json")
.timeout(AuthConfig.HTTP_TIMEOUT)
.GET();
if (var5 != null) {
var12.header("If-None-Match", var5);
}
HttpResponse var13 = this.httpClient.send(var12.build(), BodyHandlers.ofString());
class="kw">return this.handleResponse(var13);
} catch (InterruptedException var14) {
Thread.currentThread().interrupt();
LOGGER.at(Level.FINE).log("Live config fetch interrupted");
class="kw">return null;
} catch (Exception var15) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var15)).log("Failed to fetch live config");
class="kw">return null;
}
} else {
LOGGER.at(Level.FINE).log("No session token available for live config fetch");
class="kw">return null;
}
}
@Nullable
class="kw">private LiveConfigSnapshot handleResponse(@Nonnull HttpResponse<String> var1) {
int var2 = var1.statusCode();
if (var2 == 304) {
LOGGER.at(Level.FINE).log("Live config not modified (304)");
class="kw">return null;
} else if (var2 != 200) {
LOGGER.at(Level.WARNING).log("Live config fetch failed: HTTP %d", var2);
class="kw">return null;
} else {
class="kw">return this.parseResponse(var1);
}
}
@Nullable
class="kw">private LiveConfigSnapshot parseResponse(@Nonnull HttpResponse<String> var1) {
try {
BsonDocument var2 = BsonDocument.parse(var1.body());
String var3 = var2.getString("version").getValue();
Map var4 = new HashMap<>();
if (var2.containsKey("flags")) {
for (Entry var6 : var2.getDocument("flags").entrySet()) {
BsonDocument var7 = var6.getValue().asDocument();
String var8 = var7.getString("type").getValue();
Object var9 = parseValue(var8, var7);
var4.put(var6.getKey(), new LiveConfigSnapshot.ResolvedFlag(var8, var9));
}
}
String var11 = var1.headers().firstValue("ETag").orElse(var3);
class="kw">return new LiveConfigSnapshot(var3, var11, var4);
} catch (Exception var10) {
((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var10)).log("Failed to parse live config response");
class="kw">return null;
}
}
@Nullable
class="kw">private class="kw">static Object parseValue(@Nonnull String var0, @Nonnull BsonDocument var1) {
BsonValue var2 = var1.get("value");
if (var2 != null && !var2.isNull()) {
class="kw">return class="kw">switch (var0) {
case "boolean" -> var2.asBoolean().getValue();
case "integer" -> var2.asNumber().intValue();
case "string" -> var2.asString().getValue();
class="kw">default -> {
LOGGER.at(Level.WARNING).log("Unknown flag type: %s", var0);
yield null;
}
};
} else {
class="kw">return null;
}
}
@Nonnull
class="kw">private class="kw">static String encode(@Nonnull String var0) {
class="kw">return URLEncoder.encode(var0, StandardCharsets.UTF_8);
}
@Nonnull
class="kw">public class="kw">static String detectOS() {
String var0 = System.getProperty("os.name", "").toLowerCase(Locale.ROOT);
if (var0.contains("win")) {
class="kw">return "windows";
} else if (var0.contains("mac") || var0.contains("darwin")) {
class="kw">return "darwin";
} else {
class="kw">return !var0.contains("linux") && !var0.contains("nux") ? "any" : "linux";
}
}
@Nonnull
class="kw">public class="kw">static String detectArch() {
String var0 = System.getProperty("os.arch", "").toLowerCase(Locale.ROOT);
if (var0.equals("amd64") || var0.equals("x86_64")) {
class="kw">return "amd64";
} else {
class="kw">return !var0.equals("aarch64") && !var0.equals("arm64") ? "any" : "arm64";
}
}
}