| console.log('Starting...') |
|
|
| import yargs from 'yargs' |
| import cfonts from 'cfonts' |
| import { fileURLToPath } from 'url' |
| import { join, dirname } from 'path' |
| import { createRequire } from 'module' |
| import { createInterface } from 'readline' |
| import { setupMaster, fork } from 'cluster' |
| import { watchFile, unwatchFile } from 'fs' |
|
|
| |
| const { say } = cfonts |
| const rl = createInterface(process.stdin, process.stdout) |
| const __dirname = dirname(fileURLToPath(import.meta.url)) |
| const require = createRequire(__dirname) |
| const { name, author } = require(join(__dirname, './package.json')) |
|
|
| say('R-BOT', { font: 'chrome', align: 'center', gradient: ['red', 'magenta'] }) |
| say(`Happy Surfing`, { font: 'console', align: 'center', gradient: ['red', 'magenta'] }) |
|
|
| var isRunning = false |
| |
| |
| |
| |
| function start(file) { |
| if (isRunning) return |
| isRunning = true |
| let args = [join(__dirname, file), ...process.argv.slice(2)] |
| say([process.argv[0], ...args].join(' '), { font: 'console', align: 'center', gradient: ['red', 'magenta'] }) |
| setupMaster({ exec: args[0], args: args.slice(1) }) |
| let p = fork() |
| p.on('message', data => { |
| console.log('[RECEIVED]', data) |
| switch (data) { |
| case "reset": |
| console.log("saatnya reset"); |
| p.process.kill(); |
| isRunning = false; |
| start.apply(this, arguments); |
| break; |
| case "null": |
| p.process.kill(); |
| isRunning = false; |
| start.apply(this, arguments); |
| break; |
| case "SIGKILL": |
| p.process.kill(); |
| isRunning = false; |
| start.apply(this, arguments); |
| break; |
| case "uptime": |
| p.send(process.uptime()); |
| break; |
| case 'sigsegv': |
| p.process.kill() |
| isRunning = false |
| start.apply(this, arguments) |
| break |
| } |
| }) |
| p.on('exit', (_, code) => { |
| isRunning = false |
| console.error('Exited with code:', code) |
| if (code !== 0) return start(file) |
| watchFile(args[0], () => { |
| unwatchFile(args[0]) |
| start(file) |
| }) |
| }) |
| let opts = new Object(yargs(process.argv.slice(2)).exitProcess(false).parse()) |
| if (!opts['test']) |
| if (!rl.listenerCount()) rl.on('line', line => { |
| p.emit('message', line.trim()) |
| }) |
| |
| } |
|
|
| start('main.js') |