From 92fdfa49e3f35a03bb3816c2564c24b40cafa3d2 Mon Sep 17 00:00:00 2001 From: Jordan Rey Date: Thu, 22 Dec 2022 22:16:36 +0100 Subject: [PATCH] start the game without the .exe --- src/main/ipc.ts | 6 ++++- src/main/updater.ts | 17 ++++++++++---- src/main/utils.ts | 56 +++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 1 + 4 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 src/main/utils.ts diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 8687d73..89e1468 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -5,6 +5,7 @@ import { Constants } from "./constants"; import { CdnService } from "./cdnService"; import { Updater } from "./updater"; import { exec } from "child_process"; +import { Utils } from "./utils"; export namespace IPC { export function registerEvents(mainWindow: BrowserWindow) { @@ -45,9 +46,12 @@ export namespace IPC { }); ipcMain.on("launchGame", (_event) => { + const javaArgs = Utils.buildJavaArgs(process.platform); + console.log(`Launching game with args: ${javaArgs}`); + switch (process.platform) { case "win32": - exec("start DofusArena.exe", { cwd: Constants.GAME_PATH }); + exec(`..\\jre\\bin\\java.exe ${javaArgs}`, { cwd: path.join(Constants.GAME_PATH, "game") }); break; } }); diff --git a/src/main/updater.ts b/src/main/updater.ts index 5bcf815..1a5eea1 100644 --- a/src/main/updater.ts +++ b/src/main/updater.ts @@ -114,11 +114,20 @@ export namespace Updater { } async function downloadAndSave(fileUrl: string, filePath: string) { - const fileBuf = await got.get(fileUrl).buffer(); - if (!fs.existsSync(path.dirname(filePath))) { - fs.mkdirSync(path.dirname(filePath), { recursive: true }); + try { + const fileBuf = await got.get(fileUrl).buffer(); + if (!fs.existsSync(path.dirname(filePath))) { + fs.mkdirSync(path.dirname(filePath), { recursive: true }); + } + fs.writeFileSync(filePath, fileBuf); + } catch (err) { + console.error(err); + dialog.showErrorBox( + "Une erreur est survenue", + "Erreur lors du téléchargement d'un fichier !\nVérifiez votre connexion internet et réessayez.\n\nSi le problème persiste, contactez nous sur Discord." + ); + app.quit(); } - fs.writeFileSync(filePath, fileBuf); } async function downloadFiles(files: Array) { diff --git a/src/main/utils.ts b/src/main/utils.ts new file mode 100644 index 0000000..709b2d2 --- /dev/null +++ b/src/main/utils.ts @@ -0,0 +1,56 @@ +import { Constants } from "./constants"; +import path from "path"; +import fs from "fs"; + +export namespace Utils { + export const buildJavaArgs = (platform: NodeJS.Platform) => { + const javaArgs: Array = []; + + // Library Path + switch (platform) { + case "win32": + javaArgs.push(`-Djava.library.path=..\\natives\\win32\\x86;..\\jre\\bin`); + break; + } + + // Game related args + javaArgs.push("-client"); + + // JVM Args + javaArgs.push("-Xmx384M"); + javaArgs.push("-Xms192M"); + javaArgs.push("-Dsun.awt.noerasebackground=true"); + javaArgs.push("-XX:MaxDirectMemorySize=92m"); + javaArgs.push("-XX:+ForceTimeHighResolution"); + javaArgs.push("-XX:MinHeapFreeRatio=10"); + javaArgs.push("-XX:MaxHeapFreeRatio=20"); + javaArgs.push("-Xss256k"); + + // Classpath + const classPath = []; + const libPath = path.join(Constants.GAME_PATH, "lib"); + const libFiles = fs.readdirSync(libPath); + switch (platform) { + case "win32": + classPath.push("core.jar"); + libFiles.forEach((file) => { + classPath.push(`..\\lib\\${file}`); + }); + javaArgs.push(`-Djava.class.path=${classPath.join(";")}`); + break; + } + + // Main class + javaArgs.push("com.ankamagames.dofusarena.client.DofusArenaClient"); + + // Logs path + switch (platform) { + case "win32": + javaArgs.push("error.log"); + javaArgs.push("output.log"); + break; + } + + return javaArgs.join(" "); + }; +} diff --git a/tsconfig.json b/tsconfig.json index 333c66c..9c6dd6a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "baseUrl": ".", "outDir": "dist", "jsx": "react-jsx", + "target": "es2021", "moduleResolution": "node", "resolveJsonModule": true, "paths": {