UNPKG

mmir-lib

Version:

MMIR (Mobile Multimodal Interaction and Relay) library

76 lines (67 loc) 2.05 kB
/** * helper script for running Web Workers in node: * * make workers that run via worker_threads module appear like workers that * run in a browser environment: * <ul> * <li> provide global variable self * </li><li> provide onmessage field/hook * </li><li> provide postMessage function * </li><li> provide importScripts() function * </li> * </ul> * * @module workers/node-utils */ //ignore for WEBPACK build: if(typeof WEBPACK_BUILD === 'undefined' || !WEBPACK_BUILD){ var worker_threads = require('worker_threads'); var parentPort = worker_threads.parentPort; global.self = this; self.isMainThread = worker_threads.isMainThread; // var destroyed = false; // parentPort.on('exit', function(){ // log('## [worker_threads::onexit] ') // destroyed = true; // }); // parentPort.on('error', function(err){ // log('## [worker_threads::onerr] ', err); // }); // // var log = function(){ // try{ // console.log.apply(console, arguments); // } catch(_err){} // } Object.defineProperty(global.self, 'onmessage', { set: function(func){ //simulate setting onmessage callback: if(parentPort.removeAllListeners){ //onmessage hook is "singleton" -> remove any previously registered listeners parentPort.removeAllListeners('message'); } //only register, if TRUTHY (i.e. interpret FALSY as "unregister listener/hook"): if(func){ parentPort.on('message', function(data){ // if(!destroyed) log('## [worker_threads::onmessage] ', data); func.call(global, {data: data}); }); } } }); self.postMessage = function(data){ // if(!destroyed) log('## [worker_threads::postMessage] ', data); parentPort.postMessage(data); }; var path = require('path'); global.importScripts = function(){ var p; for(var i=0, size = arguments.length; i < size; ++i){ p = arguments[i]; if(!path.isAbsolute(p) && !/^[^/]+:\/\//.test(p)){ p = path.join(__dirname, p); } require(p); } } }