UNPKG

queen-remote

Version:

Rule browsers remotely, remotely

53 lines (40 loc) 1.3 kB
var generateId = require('node-uuid').v4, its = require('its'), utils = require('../utils.js'); var create = exports.create = function(id, provider, emitter, onSendToSocket){ its.object(emitter, "An emitter is required for workers"); var worker = new Worker(id, provider, emitter, onSendToSocket); return worker.api; }; var Worker = exports.Worker = function(id, provider, emitter, onSendToSocket){ var self = this; this.id = id; this.provider = provider; this.emitter = emitter; this.sendToSocket = onSendToSocket; this.kill = utils.once(this.kill.bind(this)); this.emitter.on('dead', function(){ self.kill = utils.noop; self.emitter.removeAllListeners(); }); Object.defineProperty(this, "api", { value: Object.freeze(getApi.call(this)), enumerable: true }); }; var getApi = function(){ var self = this, api = this.sendToSocket.bind(this); api.on = this.emitter.on.bind(this.emitter); api.removeListener = this.emitter.removeListener.bind(this.emitter); api.kill = this.kill; api.id = this.id; Object.defineProperty(api, "provider", { get: function(){ return self.provider}, enumerable: true }); return api; }; Worker.prototype.kill = function(reason){ this.emitter.emit('dead', reason); };