DiscoveryService class
Пакет: com.hypixel.hytale.server.core.discovery
Файл: com/hypixel/hytale/server/core/discovery/DiscoveryService.java
Поля (13)
| Модификаторы | Тип | Имя |
|---|---|---|
|
SUCCESS,
TOKEN_NOT_FOUND,
PROFILE_MISMATCH, |
FAILED |
|
HttpResponse |
var10 |
|
String |
var11 |
|
int |
var12 |
|
ServerAuthManager |
var2 |
|
String |
var3 |
|
String |
var4 |
|
|
var4 |
|
String |
var5 |
|
|
var5 |
|
long |
var6 |
|
String |
var8 |
|
HttpRequest |
var9 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
HeartbeatResult HeartbeatResult() |
static |
String |
escapeJsonStringString escapeJsonString(String var0) |
|
|
if if(var4 == null) |
|
|
if if(var5 == null) |
|
|
if if(var13 instanceof InterruptedException) |
|
public boolean |
isAuthFailurepublic boolean isAuthFailure() |
public |
DiscoveryService.HeartbeatResult |
sendHeartbeatDiscoveryService.HeartbeatResult sendHeartbeat(String var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.discovery;
class="kw">import com.hypixel.hytale.common.util.java.ManifestUtil;
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.http.HttpClient;
class="kw">import java.net.http.HttpRequest;
class="kw">import java.net.http.HttpResponse;
class="kw">import java.net.http.HttpRequest.BodyPublishers;
class="kw">import java.net.http.HttpResponse.BodyHandlers;
class="kw">import java.util.Locale;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class DiscoveryService {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final HttpClient httpClient = ServiceHttpClientFactory.newBuilder(AuthConfig.HTTP_TIMEOUT).build();
class="kw">public DiscoveryService() {
}
class="kw">public DiscoveryService.HeartbeatResult sendHeartbeat(String var1) {
try {
ServerAuthManager var2 = ServerAuthManager.getInstance();
String var3 = var2.getSessionToken();
String var4 = ManifestUtil.getPatchline();
if (var4 == null) {
var4 = "dev";
}
String var5 = ManifestUtil.getVersion();
if (var5 == null) {
var5 = "dev";
}
long var6 = 3871693122L;
String var8 = String.format(
Locale.ROOT,
"{\"discoveryToken\":\"%s\",\"serverPatchline\":\"%s\",\"serverVersion\":\"%s\",\"protocolVersion\":%d}",
escapeJsonString(var1),
escapeJsonString(var4),
escapeJsonString(var5),
var6
);
HttpRequest var9 = HttpRequest.newBuilder()
.uri(URI.create(String.format("%s/servers/heartbeat", "https://server-discovery.hytale.com")))
.header("User-Agent", AuthConfig.USER_AGENT)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + var3)
.POST(BodyPublishers.ofString(var8))
.build();
HttpResponse var10 = this.httpClient.send(var9, BodyHandlers.ofString());
if (var10.statusCode() == 204) {
class="kw">return DiscoveryService.HeartbeatResult.SUCCESS;
} else {
String var11 = var10.body();
LOGGER.at(Level.WARNING).log("Discovery heartbeat failed with status code %d, body: %s", var10.statusCode(), var11);
int var12 = var10.statusCode();
if (var12 != 404 || !var11.contains("TOKEN_NOT_FOUND") && !var11.contains("server not found")) {
class="kw">return var12 != 403 || !var11.contains("PROFILE_MISMATCH") && !var11.contains("session token needs to be from same profile as server")
? DiscoveryService.HeartbeatResult.FAILED
: DiscoveryService.HeartbeatResult.PROFILE_MISMATCH;
} else {
class="kw">return DiscoveryService.HeartbeatResult.TOKEN_NOT_FOUND;
}
}
} catch (Throwable var13) {
if (var13 class="kw">instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var13)).log("Failed to send discovery heartbeat");
class="kw">return DiscoveryService.HeartbeatResult.FAILED;
}
}
class="kw">private class="kw">static String escapeJsonString(String var0) {
class="kw">return var0 == null ? "" : var0.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r").replace("\t", "\\t");
}
class="kw">public enum HeartbeatResult {
SUCCESS,
TOKEN_NOT_FOUND,
PROFILE_MISMATCH,
FAILED;
HeartbeatResult() {
}
class="kw">public boolean isAuthFailure() {
class="kw">return this == TOKEN_NOT_FOUND || this == PROFILE_MISMATCH;
}
}
}