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