Merge pull request #2062 from MartinFournier/fix/dangling-process

Handle electron process uncaught exceptions
This commit is contained in:
hydroflame
2021-12-22 15:30:33 -05:00
committed by GitHub
4 changed files with 40 additions and 10 deletions

View File

@ -1,11 +1,21 @@
/* eslint-disable no-process-exit */
/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/no-var-requires */
const { app, BrowserWindow, Menu, shell, dialog } = require("electron"); const { app, BrowserWindow, Menu, shell, dialog } = require("electron");
const log = require('electron-log');
const greenworks = require("./greenworks"); const greenworks = require("./greenworks");
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()) { if (greenworks.init()) {
console.log("Steam API has been initialized."); log.info("Steam API has been initialized.");
} else { } else {
console.log("Steam API has failed to initialize."); log.warn("Steam API has failed to initialize.");
} }
const debug = false; const debug = false;
@ -67,6 +77,7 @@ function createWindow(killall) {
win.achievementsIntervalID = intervalID; win.achievementsIntervalID = intervalID;
const reloadAndKill = (killScripts = true) => { const reloadAndKill = (killScripts = true) => {
log.info('Reloading & Killing all scripts...');
setStopProcessHandler(app, win, false); setStopProcessHandler(app, win, false);
if (intervalID) clearInterval(intervalID); if (intervalID) clearInterval(intervalID);
win.webContents.forcefullyCrashRenderer(); win.webContents.forcefullyCrashRenderer();
@ -168,8 +179,8 @@ function setStopProcessHandler(app, window, enabled) {
const stopProcessHandler = () => { const stopProcessHandler = () => {
if (process.platform !== "darwin") { if (process.platform !== "darwin") {
log.info('Quitting the app...');
app.quit(); app.quit();
// eslint-disable-next-line no-process-exit
process.exit(0); process.exit(0);
} }
}; };
@ -184,6 +195,7 @@ function setStopProcessHandler(app, window, enabled) {
} }
app.whenReady().then(() => { app.whenReady().then(() => {
log.info('Application is ready!');
const win = createWindow(process.argv.includes("--no-scripts")); const win = createWindow(process.argv.includes("--no-scripts"));
setStopProcessHandler(app, win, true); setStopProcessHandler(app, win, true);
}); });

14
package-lock.json generated
View File

@ -5,6 +5,7 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bitburner",
"version": "1.2.0", "version": "1.2.0",
"hasInstallScript": true, "hasInstallScript": true,
"license": "SEE LICENSE IN license.txt", "license": "SEE LICENSE IN license.txt",
@ -62,6 +63,7 @@
"babel-loader": "^8.0.5", "babel-loader": "^8.0.5",
"cypress": "^8.3.1", "cypress": "^8.3.1",
"electron": "^14.0.2", "electron": "^14.0.2",
"electron-log": "^4.4.3",
"electron-packager": "^15.4.0", "electron-packager": "^15.4.0",
"eslint": "^7.24.0", "eslint": "^7.24.0",
"fork-ts-checker-webpack-plugin": "^6.3.3", "fork-ts-checker-webpack-plugin": "^6.3.3",
@ -7629,6 +7631,12 @@
"node": ">= 8.6" "node": ">= 8.6"
} }
}, },
"node_modules/electron-log": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.3.tgz",
"integrity": "sha512-IWxkiVLSpbI4if61kTSLMErYwz+Jq/gnHeTtQ8jcAjtlU8rgTIScWBgZJxk3fVnyvW6M+Ci3Bn9ogHgjgDSvNg==",
"dev": true
},
"node_modules/electron-notarize": { "node_modules/electron-notarize": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz", "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",
@ -27696,6 +27704,12 @@
} }
} }
}, },
"electron-log": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.3.tgz",
"integrity": "sha512-IWxkiVLSpbI4if61kTSLMErYwz+Jq/gnHeTtQ8jcAjtlU8rgTIScWBgZJxk3fVnyvW6M+Ci3Bn9ogHgjgDSvNg==",
"dev": true
},
"electron-notarize": { "electron-notarize": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz", "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",

View File

@ -64,6 +64,7 @@
"babel-loader": "^8.0.5", "babel-loader": "^8.0.5",
"cypress": "^8.3.1", "cypress": "^8.3.1",
"electron": "^14.0.2", "electron": "^14.0.2",
"electron-log": "^4.4.3",
"electron-packager": "^15.4.0", "electron-packager": "^15.4.0",
"eslint": "^7.24.0", "eslint": "^7.24.0",
"fork-ts-checker-webpack-plugin": "^6.3.3", "fork-ts-checker-webpack-plugin": "^6.3.3",
@ -112,8 +113,8 @@
"test:watch": "jest --watch", "test:watch": "jest --watch",
"watch": "webpack --watch --mode production", "watch": "webpack --watch --mode production",
"watch:dev": "webpack --watch --mode development", "watch:dev": "webpack --watch --mode development",
"package-electron": "electron-packager .package bitburner --all --out .build --overwrite --icon .package/icon.png", "electron": "sh ./package.sh",
"electron": "cp -r electron/* .package && cp index.html .package && cp main.bundle.js .package && cp dist/vendor.bundle.js .package/dist/ && cp -r dist/ext .package/dist/ && electron-packager .package bitburner --all --out .build --overwrite --icon .package/icon.png", "electron:packager": "electron-packager .package bitburner --all --out .build --overwrite --icon .package/icon.png --no-prune",
"allbuild": "npm run build && npm run electron && git add --all && git commit --amend --no-edit && git push -f -u origin dev" "allbuild": "npm run build && npm run electron && git add --all && git commit --amend --no-edit && git push -f -u origin dev"
} }
} }

View File

@ -1,11 +1,13 @@
# npm install electron --save-dev #!/bin/sh
# npm install electron-packager --save-dev
mkdir -p .package/dist/src/ThirdParty || true mkdir -p .package/dist/src/ThirdParty || true
mkdir -p .package/src/ThirdParty || true mkdir -p .package/src/ThirdParty || true
mkdir -p .package/node_modules || true
cp index.html .package cp index.html .package
cp electron/* .package cp -r electron/* .package
cp -r dist/ext .package/dist
# The css files # The css files
cp dist/vendor.css .package/dist cp dist/vendor.css .package/dist
cp main.css .package/main.css cp main.css .package/main.css
@ -14,6 +16,7 @@ cp main.css .package/main.css
cp dist/vendor.bundle.js .package/dist/vendor.bundle.js cp dist/vendor.bundle.js .package/dist/vendor.bundle.js
cp main.bundle.js .package/main.bundle.js cp main.bundle.js .package/main.bundle.js
cp src/ThirdParty/raphael.min.js .package/src/ThirdParty/raphael.min.js # Adding electron-log dependency
cp -r node_modules/electron-log .package/node_modules/electron-log
npm run package-electron npm run electron:packager