mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-06 05:32:06 +00:00
Cargar splash local y estabilizar la transición loading→dashboard (#12)
* Fix startup loading window sequencing * Remove local splash and show bundle loading only * Increase loading delay and force-stop NodeCG on quit
This commit is contained in:
+31
-6
@@ -8,10 +8,11 @@ const DEFAULT_NODECG_PORT = process.env.NODECG_PORT ?? "9090";
|
|||||||
const DEFAULT_BUNDLE_NAME = process.env.NODECG_BUNDLE_NAME ?? "scoreko-dev";
|
const DEFAULT_BUNDLE_NAME = process.env.NODECG_BUNDLE_NAME ?? "scoreko-dev";
|
||||||
const DEFAULT_DASHBOARD_ROUTE = process.env.SCOREKO_DASHBOARD_ROUTE ?? "dashboard/example/main.html?standalone=true";
|
const DEFAULT_DASHBOARD_ROUTE = process.env.SCOREKO_DASHBOARD_ROUTE ?? "dashboard/example/main.html?standalone=true";
|
||||||
const DEFAULT_LOADING_ROUTE = process.env.SCOREKO_LOADING_ROUTE ?? "dashboard/loading/main.html?standalone=true";
|
const DEFAULT_LOADING_ROUTE = process.env.SCOREKO_LOADING_ROUTE ?? "dashboard/loading/main.html?standalone=true";
|
||||||
const LOAD_DELAY_MS = Number.parseInt(process.env.ELECTRON_LOAD_DELAY_MS ?? "2500", 10);
|
const LOAD_DELAY_MS = Number.parseInt(process.env.ELECTRON_LOAD_DELAY_MS ?? "10000", 10);
|
||||||
const STARTUP_TIMEOUT_MS = Number.parseInt(process.env.NODECG_STARTUP_TIMEOUT_MS ?? "30000", 10);
|
const STARTUP_TIMEOUT_MS = Number.parseInt(process.env.NODECG_STARTUP_TIMEOUT_MS ?? "30000", 10);
|
||||||
const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true";
|
const USE_SYSTEM_NODE = (process.env.NODECG_USE_SYSTEM_NODE ?? "false").toLowerCase() === "true";
|
||||||
const NODE_BINARY = process.env.NODECG_NODE_BINARY ?? "node";
|
const NODE_BINARY = process.env.NODECG_NODE_BINARY ?? "node";
|
||||||
|
const NODECG_KILL_TIMEOUT_MS = Number.parseInt(process.env.NODECG_KILL_TIMEOUT_MS ?? "2500", 10);
|
||||||
|
|
||||||
const isDev = !app.isPackaged;
|
const isDev = !app.isPackaged;
|
||||||
const rootPath = isDev ? path.resolve(__dirname, "../..") : process.resourcesPath;
|
const rootPath = isDev ? path.resolve(__dirname, "../..") : process.resourcesPath;
|
||||||
@@ -235,26 +236,36 @@ async function launch(): Promise<void> {
|
|||||||
mainWindow = createMainWindow();
|
mainWindow = createMainWindow();
|
||||||
loadingWindow = createLoadingWindow();
|
loadingWindow = createLoadingWindow();
|
||||||
|
|
||||||
loadingWindow.show();
|
|
||||||
|
|
||||||
lastNodeCGOutput = "";
|
lastNodeCGOutput = "";
|
||||||
nodecgProcess = startNodeCG();
|
nodecgProcess = startNodeCG();
|
||||||
|
|
||||||
await sleep(Math.max(0, LOAD_DELAY_MS));
|
|
||||||
await waitForNodeCGReady(Date.now());
|
await waitForNodeCGReady(Date.now());
|
||||||
|
|
||||||
|
if (!loadingWindow || loadingWindow.isDestroyed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await loadingWindow.loadURL(loadingUrl);
|
await loadingWindow.loadURL(loadingUrl);
|
||||||
|
loadingWindow.show();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log("No se pudo cargar la ruta de loading del bundle", loadingUrl, error);
|
log("No se pudo cargar la ruta de loading del bundle", loadingUrl, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const loadingShownAt = Date.now();
|
||||||
|
|
||||||
if (!mainWindow) {
|
if (!mainWindow) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await mainWindow.loadURL(dashboardUrl);
|
await mainWindow.loadURL(dashboardUrl);
|
||||||
|
|
||||||
|
const remainingLoadingDelay = Math.max(0, LOAD_DELAY_MS - (Date.now() - loadingShownAt));
|
||||||
|
if (remainingLoadingDelay > 0) {
|
||||||
|
await sleep(remainingLoadingDelay);
|
||||||
|
}
|
||||||
|
|
||||||
mainWindow.show();
|
mainWindow.show();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw new Error(`No se pudo cargar el dashboard en ${dashboardUrl}. ${String(error)}`);
|
throw new Error(`No se pudo cargar el dashboard en ${dashboardUrl}. ${String(error)}`);
|
||||||
@@ -271,8 +282,18 @@ function stopNodeCG(): void {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
log(`Stopping NodeCG pid=${nodecgProcess.pid}`);
|
const processToStop = nodecgProcess;
|
||||||
nodecgProcess.kill("SIGTERM");
|
const pid = processToStop.pid;
|
||||||
|
|
||||||
|
log(`Stopping NodeCG pid=${pid}`);
|
||||||
|
processToStop.kill("SIGTERM");
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if (processToStop.exitCode === null && processToStop.signalCode === null) {
|
||||||
|
log(`NodeCG did not exit after SIGTERM, forcing SIGKILL pid=${pid}`);
|
||||||
|
processToStop.kill("SIGKILL");
|
||||||
|
}
|
||||||
|
}, Math.max(0, NODECG_KILL_TIMEOUT_MS));
|
||||||
}
|
}
|
||||||
|
|
||||||
function log(...args: unknown[]): void {
|
function log(...args: unknown[]): void {
|
||||||
@@ -314,6 +335,10 @@ app.on("before-quit", () => {
|
|||||||
stopNodeCG();
|
stopNodeCG();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.on("will-quit", () => {
|
||||||
|
stopNodeCG();
|
||||||
|
});
|
||||||
|
|
||||||
process.on("exit", () => {
|
process.on("exit", () => {
|
||||||
stopNodeCG();
|
stopNodeCG();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user