mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-09-07 00:17:17 +08:00
exit child process while parent process has exited - tip: to make disconnect event being trigger, a ipc channel must be established between parent and child event
This commit is contained in:
@@ -307,11 +307,15 @@ export async function mainLoop (hooks) {
|
|||||||
|
|
||||||
// ;await browser.close()
|
// ;await browser.close()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
browser.close()
|
closeBrowserWindow()
|
||||||
browse = null
|
|
||||||
page = null
|
|
||||||
|
|
||||||
console.error(err)
|
console.error(err)
|
||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function closeBrowserWindow () {
|
||||||
|
browser?.close()
|
||||||
|
browse = null
|
||||||
|
page = null
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export enum DOWNLOAD_ERROR_EXIT_CODE {
|
|||||||
DOWNLOAD_ERROR = 1
|
DOWNLOAD_ERROR = 1
|
||||||
}
|
}
|
||||||
export const checkAndDownloadDependenciesForInit = async () => {
|
export const checkAndDownloadDependenciesForInit = async () => {
|
||||||
|
process.on('disconnect', () => app.exit())
|
||||||
app.dock.hide()
|
app.dock.hide()
|
||||||
let pipe: null | net.Socket = null
|
let pipe: null | net.Socket = null
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -13,7 +13,17 @@ const initPlugins = (hooks) => {
|
|||||||
new DingtalkPlugin(dingTalkAccessToken).apply(hooks)
|
new DingtalkPlugin(dingTalkAccessToken).apply(hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isParentProcessDisconnect = false
|
||||||
|
|
||||||
export const runAutoChat = async () => {
|
export const runAutoChat = async () => {
|
||||||
|
const { initPuppeteer, mainLoop, closeBrowserWindow } = await import(
|
||||||
|
'@geekgeekrun/geek-auto-start-chat-with-boss/index.mjs'
|
||||||
|
)
|
||||||
|
process.on('disconnect', () => {
|
||||||
|
isParentProcessDisconnect = true
|
||||||
|
closeBrowserWindow()
|
||||||
|
app.exit()
|
||||||
|
})
|
||||||
app.dock.hide()
|
app.dock.hide()
|
||||||
let pipe: null | net.Socket = null
|
let pipe: null | net.Socket = null
|
||||||
try {
|
try {
|
||||||
@@ -27,7 +37,7 @@ export const runAutoChat = async () => {
|
|||||||
}) + '\r\n'
|
}) + '\r\n'
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
await (await import('@geekgeekrun/geek-auto-start-chat-with-boss/index.mjs')).initPuppeteer()
|
await initPuppeteer()
|
||||||
pipe?.write(
|
pipe?.write(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
type: 'PUPPETEER_INITIALIZE_SUCCESSFULLY'
|
type: 'PUPPETEER_INITIALIZE_SUCCESSFULLY'
|
||||||
@@ -44,7 +54,6 @@ export const runAutoChat = async () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const mainLoop = (await import('@geekgeekrun/geek-auto-start-chat-with-boss/index.mjs')).mainLoop
|
|
||||||
const hooks = {
|
const hooks = {
|
||||||
puppeteerLaunched: new SyncHook(),
|
puppeteerLaunched: new SyncHook(),
|
||||||
pageLoaded: new SyncHook(),
|
pageLoaded: new SyncHook(),
|
||||||
@@ -61,7 +70,7 @@ export const runAutoChat = async () => {
|
|||||||
type: 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED' //geek-auto-start-chat-with-boss-started
|
type: 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED' //geek-auto-start-chat-with-boss-started
|
||||||
}) + '\r\n'
|
}) + '\r\n'
|
||||||
)
|
)
|
||||||
while (true) {
|
while (!([isParentProcessDisconnect].includes(true))) {
|
||||||
try {
|
try {
|
||||||
await mainLoop(hooks)
|
await mainLoop(hooks)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -73,4 +82,5 @@ export const runAutoChat = async () => {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
closeBrowserWindow()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ export function createMainWindow(): void {
|
|||||||
}
|
}
|
||||||
subProcessOfPuppeteer = childProcess.spawn(process.argv[0], process.argv.slice(1), {
|
subProcessOfPuppeteer = childProcess.spawn(process.argv[0], process.argv.slice(1), {
|
||||||
env: subProcessEnv,
|
env: subProcessEnv,
|
||||||
stdio: [null, null, null, 'pipe']
|
stdio: [null, null, null, 'pipe', 'ipc']
|
||||||
})
|
})
|
||||||
console.log(subProcessOfPuppeteer)
|
console.log(subProcessOfPuppeteer)
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@@ -151,7 +151,7 @@ export function createMainWindow(): void {
|
|||||||
process.argv.slice(1),
|
process.argv.slice(1),
|
||||||
{
|
{
|
||||||
env: subProcessEnv,
|
env: subProcessEnv,
|
||||||
stdio: [null, null, null, 'pipe']
|
stdio: [null, null, null, 'pipe', 'ipc']
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user