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