Files

51 lines
1.3 KiB
JavaScript

import path from 'node:path'
import * as url from 'url'
import { sleep } from '@geekgeekrun/utils/sleep.mjs';
import childProcess from 'node:child_process';
import { AUTO_CHAT_ERROR_EXIT_CODE } from './enums.mjs'
const rerunInterval = (() => {
let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL)
if (isNaN(v)) {
v = 3000
}
return v
})()
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
function runWithDaemon () {
const subProcessOfCore = childProcess.spawn(
`node`,
[path.join(
__dirname,
'main.mjs'
)],
{
stdio: ['inherit', 'inherit', 'inherit', 'pipe', 'ipc'],
env: {
...process.env,
MAIN_BOSSGEEKGO_RERUN_INTERVAL: rerunInterval
}
}
)
subProcessOfCore.once(
'exit',
async (exitCode) => {
if (
[
...Object.values(AUTO_CHAT_ERROR_EXIT_CODE)
].filter(it => typeof it === 'number').includes(exitCode)
) {
console.log(`[Run core daemon] Child process exit with reason ${AUTO_CHAT_ERROR_EXIT_CODE[exitCode]}.`)
process.exit(exitCode)
return
}
console.log(`[Run core daemon] Child process exit with code ${exitCode}, an internal error may not be caught, and will be restarted in ${rerunInterval}ms.`)
await sleep(rerunInterval)
runWithDaemon()
}
)
}
runWithDaemon()