mirror of
https://github.com/GravitLauncher/Launcher
synced 2025-03-31 05:28:15 +03:00
114 lines
4.4 KiB
Java
114 lines
4.4 KiB
Java
package ru.gravit.launcher;
|
|
|
|
import ru.gravit.launcher.client.ClientModuleManager;
|
|
import ru.gravit.launcher.client.DirBridge;
|
|
import ru.gravit.launcher.client.FunctionalBridge;
|
|
import ru.gravit.launcher.guard.LauncherGuardManager;
|
|
import ru.gravit.launcher.gui.JSRuntimeProvider;
|
|
import ru.gravit.launcher.gui.RuntimeProvider;
|
|
import ru.gravit.launcher.managers.ClientGsonManager;
|
|
import ru.gravit.launcher.managers.ConsoleManager;
|
|
import ru.gravit.launcher.request.Request;
|
|
import ru.gravit.launcher.request.RequestException;
|
|
import ru.gravit.launcher.request.auth.RestoreSessionRequest;
|
|
import ru.gravit.launcher.request.websockets.StandartClientWebSocketService;
|
|
import ru.gravit.utils.helper.CommonHelper;
|
|
import ru.gravit.utils.helper.EnvHelper;
|
|
import ru.gravit.utils.helper.JVMHelper;
|
|
import ru.gravit.utils.helper.LogHelper;
|
|
|
|
import java.util.Objects;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
public class LauncherEngine {
|
|
|
|
public static void main(String... args) throws Throwable {
|
|
JVMHelper.checkStackTrace(LauncherEngine.class);
|
|
JVMHelper.verifySystemProperties(Launcher.class, true);
|
|
EnvHelper.checkDangerousParams();
|
|
//if(!LauncherAgent.isStarted()) throw new SecurityException("JavaAgent not set");
|
|
LogHelper.printVersion("Launcher");
|
|
LogHelper.printLicense("Launcher");
|
|
// Start Launcher
|
|
initGson();
|
|
ConsoleManager.initConsole();
|
|
LauncherConfig config = Launcher.getConfig();
|
|
if(config.environment.equals(LauncherConfig.LauncherEnvironment.PROD))
|
|
{
|
|
if(!LauncherAgent.isStarted()) throw new SecurityException("LauncherAgent must started");
|
|
}
|
|
long startTime = System.currentTimeMillis();
|
|
try {
|
|
new LauncherEngine().start(args);
|
|
} catch (Exception e) {
|
|
LogHelper.error(e);
|
|
return;
|
|
}
|
|
long endTime = System.currentTimeMillis();
|
|
LogHelper.debug("Launcher started in %dms", endTime - startTime);
|
|
//Request.service.close();
|
|
//FunctionalBridge.close();
|
|
System.exit(0);
|
|
}
|
|
|
|
public static void initGson() {
|
|
Launcher.gsonManager = new ClientGsonManager();
|
|
Launcher.gsonManager.initGson();
|
|
}
|
|
|
|
// Instance
|
|
private final AtomicBoolean started = new AtomicBoolean(false);
|
|
public RuntimeProvider runtimeProvider;
|
|
|
|
private LauncherEngine() {
|
|
|
|
}
|
|
|
|
|
|
@LauncherAPI
|
|
public void start(String... args) throws Throwable {
|
|
Launcher.modulesManager = new ClientModuleManager(this);
|
|
LauncherConfig.getAutogenConfig().initModules();
|
|
Launcher.modulesManager.preInitModules();
|
|
if (runtimeProvider == null) runtimeProvider = new JSRuntimeProvider();
|
|
runtimeProvider.init(false);
|
|
runtimeProvider.preLoad();
|
|
if(Request.service == null)
|
|
{
|
|
String address = Launcher.getConfig().address;
|
|
LogHelper.debug("Start async connection to %s", address);
|
|
Request.service = StandartClientWebSocketService.initWebSockets(address, true);
|
|
Request.service.reconnectCallback = () ->
|
|
{
|
|
LogHelper.debug("WebSocket connect closed. Try reconnect");
|
|
try {
|
|
Request.service.open();
|
|
LogHelper.debug("Connect to %s", Launcher.getConfig().address);
|
|
} catch (Exception e) {
|
|
LogHelper.error(e);
|
|
throw new RequestException(String.format("Connect error: %s", e.getMessage() != null ? e.getMessage() : "null"));
|
|
}
|
|
try {
|
|
RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession());
|
|
request1.request();
|
|
} catch (Exception e) {
|
|
LogHelper.error(e);
|
|
}
|
|
};
|
|
}
|
|
LauncherGuardManager.initGuard(false);
|
|
Objects.requireNonNull(args, "args");
|
|
if (started.getAndSet(true))
|
|
throw new IllegalStateException("Launcher has been already started");
|
|
Launcher.modulesManager.initModules();
|
|
runtimeProvider.preLoad();
|
|
FunctionalBridge.getHWID = CommonHelper.newThread("GetHWID Thread", true, FunctionalBridge::getHWID);
|
|
FunctionalBridge.getHWID.start();
|
|
LogHelper.debug("Dir: %s", DirBridge.dir);
|
|
runtimeProvider.run(args);
|
|
}
|
|
|
|
public static LauncherEngine clientInstance() {
|
|
return new LauncherEngine();
|
|
}
|
|
}
|