mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 09:01:08 +03:00
Экспериментальная функция launchLocal
This commit is contained in:
parent
2e0e187ffc
commit
e5478930b4
1 changed files with 40 additions and 4 deletions
|
@ -370,10 +370,6 @@ else if(isDownloadJava)
|
||||||
}
|
}
|
||||||
// Add classpath and main class
|
// Add classpath and main class
|
||||||
String pathLauncher = IOHelper.getCodeSource(ClientLauncher.class).toString();
|
String pathLauncher = IOHelper.getCodeSource(ClientLauncher.class).toString();
|
||||||
StringBuilder classPathString = new StringBuilder(pathLauncher);
|
|
||||||
LinkedList<Path> classPath = resolveClassPathList(params.clientDir, profile.object.getClassPath());
|
|
||||||
for (Path path : classPath)
|
|
||||||
classPathString.append(File.pathSeparatorChar).append(path.toString());
|
|
||||||
Collections.addAll(args, profile.object.getJvmArgs());
|
Collections.addAll(args, profile.object.getJvmArgs());
|
||||||
Collections.addAll(args, "-Djava.library.path=".concat(params.clientDir.resolve(NATIVES_DIR).toString())); // Add Native Path
|
Collections.addAll(args, "-Djava.library.path=".concat(params.clientDir.resolve(NATIVES_DIR).toString())); // Add Native Path
|
||||||
Collections.addAll(args, "-javaagent:".concat(pathLauncher));
|
Collections.addAll(args, "-javaagent:".concat(pathLauncher));
|
||||||
|
@ -453,6 +449,46 @@ public static void main(String... args) throws Throwable {
|
||||||
URL[] classpathurls = resolveClassPath(params.clientDir, profile.object.getClassPath());
|
URL[] classpathurls = resolveClassPath(params.clientDir, profile.object.getClassPath());
|
||||||
classLoader = new PublicURLClassLoader(classpathurls, ClassLoader.getSystemClassLoader());
|
classLoader = new PublicURLClassLoader(classpathurls, ClassLoader.getSystemClassLoader());
|
||||||
Thread.currentThread().setContextClassLoader(classLoader);
|
Thread.currentThread().setContextClassLoader(classLoader);
|
||||||
|
classLoader.nativePath = params.clientDir.resolve(NATIVES_DIR).toString();
|
||||||
|
PublicURLClassLoader.systemclassloader = classLoader;
|
||||||
|
// Start client with WatchService monitoring
|
||||||
|
boolean digest = !profile.object.isUpdateFastCheck();
|
||||||
|
LogHelper.debug("Starting JVM and client WatchService");
|
||||||
|
FileNameMatcher assetMatcher = profile.object.getAssetUpdateMatcher();
|
||||||
|
FileNameMatcher clientMatcher = profile.object.getClientUpdateMatcher();
|
||||||
|
try (DirWatcher assetWatcher = new DirWatcher(params.assetDir, assetHDir.object, assetMatcher, digest);
|
||||||
|
DirWatcher clientWatcher = new DirWatcher(params.clientDir, clientHDir.object, clientMatcher, digest)) {
|
||||||
|
// Verify current state of all dirs
|
||||||
|
//verifyHDir(IOHelper.JVM_DIR, jvmHDir.object, null, digest);
|
||||||
|
HashedDir hdir = clientHDir.object;
|
||||||
|
for(ClientProfile.MarkedString s : Launcher.profile.getOptional())
|
||||||
|
{
|
||||||
|
if(params.updateOptional.contains(s)) s.mark = true;
|
||||||
|
else hdir.removeR(s.string);
|
||||||
|
}
|
||||||
|
verifyHDir(params.assetDir, assetHDir.object, assetMatcher, digest);
|
||||||
|
verifyHDir(params.clientDir, hdir, clientMatcher, digest);
|
||||||
|
Launcher.modulesManager.postInitModules();
|
||||||
|
// Start WatchService, and only then client
|
||||||
|
CommonHelper.newThread("Asset Directory Watcher", true, assetWatcher).start();
|
||||||
|
CommonHelper.newThread("Client Directory Watcher", true, clientWatcher).start();
|
||||||
|
launch(profile.object, params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@LauncherAPI
|
||||||
|
public void launchLocal(SignedObjectHolder<HashedDir> assetHDir, SignedObjectHolder<HashedDir> clientHDir,
|
||||||
|
SignedObjectHolder<ClientProfile> profile, Params params) throws Throwable {
|
||||||
|
RSAPublicKey publicKey = Launcher.getConfig().publicKey;
|
||||||
|
LogHelper.debug("Verifying ClientLauncher sign and classpath");
|
||||||
|
SecurityHelper.verifySign(LauncherRequest.BINARY_PATH, params.launcherSign, publicKey);
|
||||||
|
LinkedList<Path> classPath = resolveClassPathList(params.clientDir, profile.object.getClassPath());
|
||||||
|
for (Path classpathURL : classPath) {
|
||||||
|
LauncherAgent.addJVMClassPath(classpathURL.toAbsolutePath().toString());
|
||||||
|
}
|
||||||
|
URL[] classpathurls = resolveClassPath(params.clientDir, profile.object.getClassPath());
|
||||||
|
classLoader = new PublicURLClassLoader(classpathurls, ClassLoader.getSystemClassLoader());
|
||||||
|
Thread.currentThread().setContextClassLoader(classLoader);
|
||||||
|
classLoader.nativePath = params.clientDir.resolve(NATIVES_DIR).toString();
|
||||||
PublicURLClassLoader.systemclassloader = classLoader;
|
PublicURLClassLoader.systemclassloader = classLoader;
|
||||||
// Start client with WatchService monitoring
|
// Start client with WatchService monitoring
|
||||||
boolean digest = !profile.object.isUpdateFastCheck();
|
boolean digest = !profile.object.isUpdateFastCheck();
|
||||||
|
|
Loading…
Reference in a new issue