assetexec.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. let target = require('./assetguard')[process.argv[2]]
  2. if(target == null){
  3. process.send({context: 'error', data: null, error: 'Invalid class name'})
  4. console.error('Invalid class name passed to argv[2], cannot continue.')
  5. process.exit(1)
  6. }
  7. let tracker = new target(...(process.argv.splice(3)))
  8. //const tracker = new AssetGuard(process.argv[2], process.argv[3])
  9. console.log('AssetExec Started')
  10. // Temporary for debug purposes.
  11. process.on('unhandledRejection', r => console.log(r))
  12. let percent = 0
  13. function assignListeners(){
  14. tracker.on('validate', (data) => {
  15. process.send({context: 'validate', data})
  16. })
  17. tracker.on('progress', (data, acc, total) => {
  18. const currPercent = parseInt((acc/total) * 100)
  19. if (currPercent !== percent) {
  20. percent = currPercent
  21. process.send({context: 'progress', data, value: acc, total, percent})
  22. }
  23. })
  24. tracker.on('complete', (data, ...args) => {
  25. process.send({context: 'complete', data, args})
  26. })
  27. tracker.on('error', (data, error) => {
  28. process.send({context: 'error', data, error})
  29. })
  30. }
  31. assignListeners()
  32. process.on('message', (msg) => {
  33. if(msg.task === 'execute'){
  34. const func = msg.function
  35. let nS = tracker[func] // Nonstatic context
  36. let iS = target[func] // Static context
  37. if(typeof nS === 'function' || typeof iS === 'function'){
  38. const f = typeof nS === 'function' ? nS : iS
  39. const res = f.apply(f === nS ? tracker : null, msg.argsArr)
  40. if(res instanceof Promise){
  41. res.then((v) => {
  42. process.send({result: v, context: func})
  43. }).catch((err) => {
  44. process.send({result: err.message || err, context: func})
  45. })
  46. } else {
  47. process.send({result: res, context: func})
  48. }
  49. } else {
  50. process.send({context: 'error', data: null, error: `Function ${func} not found on ${process.argv[2]}`})
  51. }
  52. } else if(msg.task === 'changeContext'){
  53. target = require('./assetguard')[msg.class]
  54. if(target == null){
  55. process.send({context: 'error', data: null, error: `Invalid class ${msg.class}`})
  56. } else {
  57. tracker = new target(...(msg.args))
  58. assignListeners()
  59. }
  60. }
  61. })
  62. process.on('disconnect', () => {
  63. console.log('AssetExec Disconnected')
  64. process.exit(0)
  65. })