Launcher/LauncherAPI/src/main/java/pro/gravit/launcher/base/Launcher.java

111 lines
3.5 KiB
Java
Raw Normal View History

2023-12-23 13:58:09 +03:00
package pro.gravit.launcher.base;
2018-09-17 10:07:32 +03:00
2023-12-23 08:05:23 +03:00
import pro.gravit.launcher.core.managers.GsonManager;
2023-12-23 13:58:09 +03:00
import pro.gravit.launcher.base.profiles.ClientProfile;
2023-12-23 08:05:23 +03:00
import pro.gravit.launcher.core.serialize.HInput;
2019-10-19 19:46:04 +03:00
import pro.gravit.utils.helper.IOHelper;
2023-04-15 09:51:33 +03:00
import pro.gravit.utils.helper.JVMHelper;
2019-10-19 19:46:04 +03:00
import pro.gravit.utils.helper.LogHelper;
2018-09-17 10:07:32 +03:00
import java.io.IOException;
import java.net.URL;
import java.nio.file.NoSuchFileException;
import java.security.spec.InvalidKeySpecException;
import java.util.UUID;
2018-09-25 17:06:13 +03:00
import java.util.concurrent.atomic.AtomicBoolean;
2018-09-17 10:07:32 +03:00
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern;
public final class Launcher {
2018-09-25 17:06:13 +03:00
// Authlib constants
2018-09-25 17:06:13 +03:00
// Used to determine from clientside is launched from launcher
public static final AtomicBoolean LAUNCHED = new AtomicBoolean(false);
2018-09-17 10:07:32 +03:00
public static final String RUNTIME_DIR = "runtime";
2020-04-05 10:27:04 +03:00
// Constants
2018-09-17 10:07:32 +03:00
public static final String CONFIG_FILE = "config.bin";
2020-04-05 10:27:04 +03:00
private static final AtomicReference<LauncherConfig> CONFIG = new AtomicReference<>();
2018-09-17 10:07:32 +03:00
private static final Pattern UUID_PATTERN = Pattern.compile("-", Pattern.LITERAL);
2020-04-05 10:27:04 +03:00
public static ClientProfile profile;
2019-04-20 01:03:06 +03:00
public static GsonManager gsonManager;
2018-09-17 10:07:32 +03:00
2018-09-17 10:07:32 +03:00
public static LauncherConfig getConfig() {
LauncherConfig config = CONFIG.get();
if (config == null) {
try (HInput input = new HInput(IOHelper.newInput(IOHelper.getResourceURL(CONFIG_FILE)))) {
config = new LauncherConfig(input);
} catch (IOException | InvalidKeySpecException e) {
throw new SecurityException(e);
}
CONFIG.set(config);
}
return config;
}
2018-11-08 15:30:16 +03:00
2018-11-08 15:30:16 +03:00
public static void setConfig(LauncherConfig cfg) {
CONFIG.set(cfg);
}
2018-09-17 10:07:32 +03:00
2018-09-17 10:07:32 +03:00
public static URL getResourceURL(String name) throws IOException {
2018-10-26 20:23:27 +03:00
LauncherConfig config = getConfig();
byte[] validDigest = config.runtime.get(name);
if (validDigest == null)
throw new NoSuchFileException(name);
2018-09-17 10:07:32 +03:00
// Resolve URL and verify digest
URL url = IOHelper.getResourceURL(RUNTIME_DIR + '/' + name);
// Return verified URL
return url;
}
2018-11-08 15:30:16 +03:00
public static URL getResourceURL(String name, String prefix) throws IOException {
LauncherConfig config = getConfig();
byte[] validDigest = config.runtime.get(name);
if (validDigest == null)
throw new NoSuchFileException(name);
// Resolve URL and verify digest
URL url = IOHelper.getResourceURL(prefix + '/' + name);
// Return verified URL
return url;
}
2018-09-17 10:07:32 +03:00
public static String toHash(UUID uuid) {
return UUID_PATTERN.matcher(uuid.toString()).replaceAll("");
}
2019-04-03 16:27:40 +03:00
public static void applyLauncherEnv(LauncherConfig.LauncherEnvironment env) {
switch (env) {
case DEV:
LogHelper.setDevEnabled(true);
LogHelper.setStacktraceEnabled(true);
LogHelper.setDebugEnabled(true);
break;
case DEBUG:
LogHelper.setDebugEnabled(true);
LogHelper.setStacktraceEnabled(true);
break;
case STD:
break;
case PROD:
LogHelper.setStacktraceEnabled(false);
LogHelper.setDebugEnabled(false);
LogHelper.setDevEnabled(false);
break;
}
}
2023-04-15 09:51:33 +03:00
public static String makeSpecialGuardDirName(JVMHelper.ARCH arch, JVMHelper.OS os) {
return String.format("%s-%s", arch.name, os.name);
}
2018-09-17 10:07:32 +03:00
}