HeartbeatResult enum

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

Файл: com/hypixel/hytale/server/core/discovery/DiscoveryService.java

Поля (1)

МодификаторыТипИмя
SUCCESS, TOKEN_NOT_FOUND, PROFILE_MISMATCH, FAILED

Методы (1)

МодификаторыВозвратСигнатура
public boolean isAuthFailurepublic boolean isAuthFailure()

Исходный код

Показать/скрыть
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;
      }
   }
}