| | 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') |