From 6b85de280657f4cf429c17893d2bc17e0902a317 Mon Sep 17 00:00:00 2001 From: Zaxar163 Date: Fri, 15 Nov 2019 14:37:43 +0100 Subject: [PATCH] =?UTF-8?q?[FIX]=20=D0=92=202=20=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=85=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=BB=D0=B5=D0=BA=D1=81=D0=B8=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/pro/gravit/launchserver/LaunchServer.java | 8 ++++---- .../launchserver/config/LaunchServerConfig.java | 7 ++++++- .../launcher/modules/impl/SimpleModuleManager.java | 14 ++++++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java index 0b60e7f8..67fae76b 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java @@ -36,7 +36,8 @@ import java.io.BufferedReader; import java.io.IOException; import java.lang.ProcessBuilder.Redirect; -import java.lang.reflect.InvocationTargetException; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.security.InvalidAlgorithmParameterException; @@ -390,9 +391,8 @@ public LaunchServer(LaunchServerDirectories directories, LaunchServerEnv env, La private LauncherBinary binary() { if (launcherEXEBinaryClass != null) { try { - return launcherEXEBinaryClass.getConstructor(LaunchServer.class).newInstance(this); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException | NoSuchMethodException | SecurityException e) { + return (LauncherBinary) MethodHandles.publicLookup().findConstructor(launcherEXEBinaryClass, MethodType.methodType(void.class, LaunchServer.class)).invoke(this); + } catch (Throwable e) { LogHelper.error(e); } } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java index d37031be..e2f20159 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java @@ -319,7 +319,12 @@ public static LaunchServerConfig getDefault(LaunchServer.LaunchServerEnv env) { newConfig.netty.fileServerEnabled = true; newConfig.netty.binds = new NettyBindAddress[]{new NettyBindAddress("0.0.0.0", 9274)}; newConfig.netty.performance = new NettyPerformanceConfig(); - newConfig.netty.performance.usingEpoll = Epoll.isAvailable(); + try { + newConfig.netty.performance.usingEpoll = Epoll.isAvailable(); + } catch (Throwable e) { + // Epoll class line 51+ catch (Exception) but Error will be thrown by System.load + newConfig.netty.performance.usingEpoll = false; + } // such as on ARM newConfig.netty.performance.bossThread = 2; newConfig.netty.performance.workerThread = 8; diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java b/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java index 740fe8b4..16737cd1 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java @@ -10,6 +10,8 @@ import pro.gravit.utils.verify.LauncherTrustManager; import java.io.IOException; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.net.URL; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -29,6 +31,7 @@ import java.util.jar.JarFile; public class SimpleModuleManager implements LauncherModulesManager { + private static final MethodType VOID_TYPE = MethodType.methodType(void.class); protected final List modules = new ArrayList<>(); protected final List moduleNames = new ArrayList<>(); protected final SimpleModuleContext context; @@ -149,10 +152,17 @@ public LauncherModule loadModule(Path file) throws IOException { @SuppressWarnings("unchecked") Class clazz = (Class) Class.forName(moduleClass, false, classLoader); checkModuleClass(clazz, checkMode); - LauncherModule module = clazz.newInstance(); + if (!LauncherModule.class.isAssignableFrom(clazz)) + throw new ClassNotFoundException("Invalid module class... Not contains LauncherModule in hierarchy."); + LauncherModule module; + try { + module = (LauncherModule) MethodHandles.publicLookup().findConstructor(clazz, VOID_TYPE).invoke(); + } catch (Throwable e) { + throw (InstantiationException) new InstantiationException("Error on instancing...").initCause(e); + } loadModule(module); return module; - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + } catch (ClassNotFoundException | InstantiationException e) { LogHelper.error(e); LogHelper.error("In module %s Module-Main-Class incorrect", file.toString()); return null;