74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
let target = require('./assetguard')[process.argv[2]]
|
|
if(target == null){
|
|
process.send({context: 'error', data: null, error: 'Invalid class name'})
|
|
console.error('Invalid class name passed to argv[2], cannot continue.')
|
|
process.exit(1)
|
|
}
|
|
let tracker = new target(...(process.argv.splice(3)))
|
|
|
|
const { LoggerUtil } = require('helios-core')
|
|
const logger = LoggerUtil.getLogger('AssetExec')
|
|
|
|
//const tracker = new AssetGuard(process.argv[2], process.argv[3])
|
|
logger.info('AssetExec Started')
|
|
|
|
// Temporary for debug purposes.
|
|
process.on('unhandledRejection', r => console.log(r))
|
|
|
|
let percent = 0
|
|
function assignListeners(){
|
|
tracker.on('validate', (data) => {
|
|
process.send({context: 'validate', data})
|
|
})
|
|
tracker.on('progress', (data, acc, total) => {
|
|
const currPercent = parseInt((acc/total) * 100)
|
|
if (currPercent !== percent) {
|
|
percent = currPercent
|
|
process.send({context: 'progress', data, value: acc, total, percent})
|
|
}
|
|
})
|
|
tracker.on('complete', (data, ...args) => {
|
|
process.send({context: 'complete', data, args})
|
|
})
|
|
tracker.on('error', (data, error) => {
|
|
process.send({context: 'error', data, error})
|
|
})
|
|
}
|
|
|
|
assignListeners()
|
|
|
|
process.on('message', (msg) => {
|
|
if(msg.task === 'execute'){
|
|
const func = msg.function
|
|
let nS = tracker[func] // Nonstatic context
|
|
let iS = target[func] // Static context
|
|
if(typeof nS === 'function' || typeof iS === 'function'){
|
|
const f = typeof nS === 'function' ? nS : iS
|
|
const res = f.apply(f === nS ? tracker : null, msg.argsArr)
|
|
if(res instanceof Promise){
|
|
res.then((v) => {
|
|
process.send({result: v, context: func})
|
|
}).catch((err) => {
|
|
process.send({result: err.message || err, context: func})
|
|
})
|
|
} else {
|
|
process.send({result: res, context: func})
|
|
}
|
|
} else {
|
|
process.send({context: 'error', data: null, error: `Function ${func} not found on ${process.argv[2]}`})
|
|
}
|
|
} else if(msg.task === 'changeContext'){
|
|
target = require('./assetguard')[msg.class]
|
|
if(target == null){
|
|
process.send({context: 'error', data: null, error: `Invalid class ${msg.class}`})
|
|
} else {
|
|
tracker = new target(...(msg.args))
|
|
assignListeners()
|
|
}
|
|
}
|
|
})
|
|
|
|
process.on('disconnect', () => {
|
|
logger.info('AssetExec Disconnected')
|
|
process.exit(0)
|
|
}) |