[FEATURE] LaunchServerLauncherExeInit

This commit is contained in:
Gravit'a 2023-05-25 15:33:01 +07:00
parent 24d625fd16
commit bddf31c94e
7 changed files with 33 additions and 23 deletions

View file

@ -95,8 +95,6 @@ public final class LaunchServer implements Runnable, AutoCloseable, Reconfigurab
* Pipeline for building EXE
*/
public final LauncherBinary launcherEXEBinary;
//public static LaunchServer server = null;
public final Class<? extends LauncherBinary> launcherEXEBinaryClass;
// Server config
public final AuthHookManager authHookManager;
public final LaunchServerModulesManager modulesManager;
@ -148,9 +146,6 @@ public LaunchServer(LaunchServerDirectories directories, LaunchServerEnv env, La
// Print keypair fingerprints
// Load class bindings.
launcherEXEBinaryClass = defaultLauncherEXEBinaryClass;
runtime.verify();
config.verify();
@ -276,12 +271,10 @@ public void invoke(String... args) throws Exception {
}
private LauncherBinary binary() {
if (launcherEXEBinaryClass != null) {
try {
return (LauncherBinary) MethodHandles.publicLookup().findConstructor(launcherEXEBinaryClass, MethodType.methodType(void.class, LaunchServer.class)).invoke(this);
} catch (Throwable e) {
logger.error(e);
}
LaunchServerLauncherExeInit event = new LaunchServerLauncherExeInit(this, null);
modulesManager.invokeEvent(event);
if(event.binary != null) {
return event.binary;
}
try {
Class.forName("net.sf.launch4j.Builder");

View file

@ -25,7 +25,7 @@ public static ClientProfile makeProfile(ClientProfile.Version version, String ti
builder.setAssetDir("asset" + version.toCleanString());
}
builder.setAssetIndex(version.toString());
builder.setInfo("Информация о сервере");
builder.setInfo("Server description");
builder.setTitle(title);
builder.setUuid(UUID.randomUUID());
builder.setMainClass(getMainClassByVersion(version, options));

View file

@ -0,0 +1,15 @@
package pro.gravit.launchserver.modules.events;
import pro.gravit.launcher.modules.LauncherModule;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.binary.LauncherBinary;
public class LaunchServerLauncherExeInit extends LauncherModule.Event {
public final LaunchServer server;
public LauncherBinary binary;
public LaunchServerLauncherExeInit(LaunchServer server, LauncherBinary binary) {
this.server = server;
this.binary = binary;
}
}

View file

@ -65,13 +65,13 @@ private void injectCertificates() {
// добавление стандартных сертификатов в новый KeyStore
jdkTrustStore.keySet().forEach(key -> setCertificateEntry(mergedTrustStore, key, jdkTrustStore.get(key)));
// Инициализация контекста. В случае неудачи допустимо прерывание процесса, но сертификаты добавлены не будут
// Context initialization. In case of failure, the process is allowed to be interrupted, but certificates will not be added
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(mergedTrustStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
// Установка контекста по умолчанию
// Setting the default context
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
LogHelper.info("Successfully injected certificates to truststore");
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException | IOException | CertificateException e) {
@ -99,7 +99,7 @@ private static Map<String, Certificate> getDefaultKeyStore() {
}
/**
* Извлечение существующих сертификатов из стандартного KeyStore текущий сессии JVM. Процесс не должен прерываться в случае неудачи
* Retrieve existing certificates from the standard KeyStore of the current JVM session. The process should not be interrupted in case of failure
*/
private static void extractAllCertsAndPutInMap(KeyStore keyStore, Map<String, Certificate> placeToExport) {
try {
@ -121,7 +121,7 @@ private static void setCertificateEntry(KeyStore keyStore, String name, Certific
}
/**
* Извлечение существующего сертификата из стандартного KeyStore текущий сессии JVM. Процесс не должен прерываться в случае неудачи
* Retrieve an existing certificate from the standard KeyStore of the current JVM session. The process should not be interrupted in case of failure
*/
private static void extractCertAndPutInMap(KeyStore keyStoreFromExtract, String key, Map<String, Certificate> placeToExtract) {
try {

View file

@ -4,11 +4,11 @@
import pro.gravit.utils.Version;
/*
* Nashorn при инициализации LogHelper пытается инициализировтаь все доступные в нем методы.
* При попытке инициализировать rawAnsiFormat он пытается найти класс org.fusesource.jansi.Ansi
* И есстественно крашится с ClassNotFound
* В итоге любой вызов LogHelper.* приводит к ClassNotFound org.fusesource.jansi.Ansi
* Поэтому rawAnsiFormat вынесен в отдельный Helper
* Nashorn when initializing LogHelper tries to initialize all methods available in it.
* When trying to initialize rawAnsiFormat , it tries to find the org.fusesource.jansi.Ansi class
* And naturally crashes with ClassNotFound
* As a result, any call to LogHelper.* results in ClassNotFound org.fusesource.jansi.Ansi
* Therefore, rawAnsiFormat is moved to a separate Helper
*/
public class FormatHelper {
public static Ansi rawAnsiFormat(LogHelper.Level level, String dateTime, boolean sub) {

View file

@ -5,7 +5,7 @@
id 'org.openjfx.javafxplugin' version '0.0.10' apply false
}
group = 'pro.gravit.launcher'
version = '5.4.2'
version = '5.4.3-SNAPSHOT'
apply from: 'props.gradle'
@ -48,6 +48,8 @@
options.encoding = "UTF-8"
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
options.incremental = true // one flag, and things will get MUCH faster
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
}
}
}

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists