57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
let $module
 | 
						|
 | 
						|
/*
 | 
						|
  let contextProto = this.context;
 | 
						|
  while (contextProto = Object.getPrototypeOf(contextProto)) {
 | 
						|
    completionGroups.push(Object.getOwnPropertyNames(contextProto));
 | 
						|
  }
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
function handle (data) {
 | 
						|
  let idx      = data.idx
 | 
						|
    , child    = data.child
 | 
						|
    , method   = data.method
 | 
						|
    , args     = data.args
 | 
						|
    , callback = function () {
 | 
						|
        let _args = Array.prototype.slice.call(arguments)
 | 
						|
        if (_args[0] instanceof Error) {
 | 
						|
          let e = _args[0]
 | 
						|
          _args[0] = {
 | 
						|
              '$error'  : '$error'
 | 
						|
            , 'type'    : e.constructor.name
 | 
						|
            , 'message' : e.message
 | 
						|
            , 'stack'   : e.stack
 | 
						|
          }
 | 
						|
          Object.keys(e).forEach(function(key) {
 | 
						|
            _args[0][key] = e[key]
 | 
						|
          })
 | 
						|
        }
 | 
						|
        process.send({ owner: 'farm', idx: idx, child: child, args: _args })
 | 
						|
      }
 | 
						|
    , exec
 | 
						|
 | 
						|
  if (method == null && typeof $module == 'function')
 | 
						|
    exec = $module
 | 
						|
  else if (typeof $module[method] == 'function')
 | 
						|
    exec = $module[method]
 | 
						|
 | 
						|
  if (!exec)
 | 
						|
    return console.error('NO SUCH METHOD:', method)
 | 
						|
 | 
						|
  exec.apply(null, args.concat([ callback ]))
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
process.on('message', function (data) {
 | 
						|
  if (data.owner !== 'farm') {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  if (!$module) return $module = require(data.module)
 | 
						|
  if (data.event == 'die') return process.exit(0)
 | 
						|
  handle(data)
 | 
						|
})
 |