mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 06:18:42 +02:00
I messed up the handlers reference in the last commit so the events were not properly attached. Changed it to use global variables for now.
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
/* eslint-disable no-process-exit */
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const { app } = require("electron");
|
|
const log = require("electron-log");
|
|
const greenworks = require("./greenworks");
|
|
const api = require("./api-server");
|
|
const gameWindow = require("./gameWindow");
|
|
const achievements = require("./achievements");
|
|
|
|
log.catchErrors();
|
|
log.info(`Started app: ${JSON.stringify(process.argv)}`);
|
|
|
|
process.on('uncaughtException', function () {
|
|
// The exception will already have been logged by electron-log
|
|
process.exit(1);
|
|
});
|
|
|
|
if (greenworks.init()) {
|
|
log.info("Steam API has been initialized.");
|
|
} else {
|
|
log.warn("Steam API has failed to initialize.");
|
|
}
|
|
|
|
function setStopProcessHandler(app, window, enabled) {
|
|
const closingWindowHandler = async (e) => {
|
|
// We need to prevent the default closing event to add custom logic
|
|
e.preventDefault();
|
|
|
|
// First we clear the achievement timer
|
|
achievements.disableAchievementsInterval(window);
|
|
|
|
// Shutdown the http server
|
|
api.disable();
|
|
|
|
// We'll try to execute javascript on the page to see if we're stuck
|
|
let canRunJS = false;
|
|
window.webContents.executeJavaScript('window.stop(); document.close()', true)
|
|
.then(() => canRunJS = true);
|
|
setTimeout(() => {
|
|
// Wait a few milliseconds to prevent a race condition before loading the exit screen
|
|
window.webContents.stop();
|
|
window.loadFile("exit.html")
|
|
}, 20);
|
|
|
|
// Wait 200ms, if the promise has not yet resolved, let's crash the process since we're possibly in a stuck scenario
|
|
setTimeout(() => {
|
|
if (!canRunJS) {
|
|
// We're stuck, let's crash the process
|
|
log.warn('Forcefully crashing the renderer process');
|
|
window.webContents.forcefullyCrashRenderer();
|
|
}
|
|
|
|
log.debug('Destroying the window');
|
|
window.destroy();
|
|
}, 200);
|
|
}
|
|
|
|
const clearWindowHandler = () => {
|
|
window = null;
|
|
};
|
|
|
|
const stopProcessHandler = () => {
|
|
log.info('Quitting the app...');
|
|
app.isQuiting = true;
|
|
app.quit();
|
|
process.exit(0);
|
|
};
|
|
|
|
if (enabled) {
|
|
log.debug('Adding closing handlers');
|
|
window.on("closed", clearWindowHandler);
|
|
window.on("close", closingWindowHandler)
|
|
app.on("window-all-closed", stopProcessHandler);
|
|
} else {
|
|
log.debug('Removing closing handlers');
|
|
window.removeListener("closed", clearWindowHandler);
|
|
window.removeListener("close", closingWindowHandler);
|
|
app.removeListener("window-all-closed", stopProcessHandler);
|
|
}
|
|
}
|
|
|
|
function startWindow(noScript) {
|
|
gameWindow.createWindow(noScript);
|
|
}
|
|
|
|
global.app_handlers = {
|
|
stopProcess: setStopProcessHandler,
|
|
createWindow: startWindow,
|
|
}
|
|
|
|
app.whenReady().then(() => {
|
|
log.info('Application is ready!');
|
|
startWindow(process.argv.includes("--no-scripts"));
|
|
});
|