@csi-foxbyte/cityjson-to-3d-tiles
Version:
A Node.js library that converts CityJSON files into Cesium 3D Tiles—complete with automatic texture atlas packing, Basis compression, three LOD levels, and customizable threading.
2 lines • 1.83 kB
JavaScript
class n{constructor(e,s,i=false){this._availableChildProcesses=[];this._waitQueue=[];this._instantiatedChildProcessCount=0;this._debug=false;this._generateChildProcessFn=e,this._debug=i,this._maxConcurrency=s;}_isChildProcessDead(e){return e.killed||e.exitCode!==null||e.signalCode!==null}_generateChildProcess(){const e=this._generateChildProcessFn();return this._instantiatedChildProcessCount++,e}acquire(){return new Promise(e=>{if(this._availableChildProcesses.length!==0){let s=this._availableChildProcesses.pop();return this._isChildProcessDead(s)?(this._instantiatedChildProcessCount--,s=this._generateChildProcess(),this._debug&&console.log("CHILD_PROCESS was dead")):this._debug&&console.log("CHILD_PROCESS was reused"),e(s)}if(this._maxConcurrency>this._instantiatedChildProcessCount){const s=this._generateChildProcess();e(s),this._debug&&console.log("CHILD_PROCESS was generated");}else this._waitQueue.push(e),this._debug&&console.log("CHILD_PROCESS was reused");})}_releaseListeners(e){e.removeAllListeners(),e.stderr&&e.stderr.removeAllListeners(),e.stdin&&e.stdin.removeAllListeners(),e.stdout&&e.stdout.removeAllListeners();}release(e,s){this._releaseListeners(e);let i=e;s&&(e.kill("SIGKILL"),this._instantiatedChildProcessCount--,i=this._generateChildProcess()),this._isChildProcessDead(i)&&(this._instantiatedChildProcessCount--,i=this._generateChildProcess()),this._waitQueue.length>0?this._waitQueue.shift()(i):this._availableChildProcesses.push(i);}destroyAll(){for(this._waitQueue=[];this._availableChildProcesses.length>0;){const e=this._availableChildProcesses.pop();this._releaseListeners(e),this._isChildProcessDead(e)||e.kill("SIGKILL");}this._instantiatedChildProcessCount=0;}}export{n as ChildProcessPool};//# sourceMappingURL=ChildProcessPool.js.map
//# sourceMappingURL=ChildProcessPool.js.map