a zip code crypto-currency system good for red ONLY

worker-client.js 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var errors_1 = require("./util/errors");
  4. var helpers_1 = require("./util/helpers");
  5. var logger_1 = require("./logger/logger");
  6. var child_process_1 = require("child_process");
  7. var path_1 = require("path");
  8. function runWorker(taskModule, taskWorker, context, workerConfig) {
  9. return new Promise(function (resolve, reject) {
  10. var worker = createWorker(taskModule);
  11. var msg = {
  12. taskModule: taskModule,
  13. taskWorker: taskWorker,
  14. context: {
  15. // only copy over what's important
  16. // don't copy over the large data properties
  17. rootDir: context.rootDir,
  18. tmpDir: context.tmpDir,
  19. srcDir: context.srcDir,
  20. wwwDir: context.wwwDir,
  21. wwwIndex: context.wwwIndex,
  22. buildDir: context.buildDir,
  23. bundledFilePaths: context.bundledFilePaths,
  24. isProd: context.isProd,
  25. isWatch: context.isWatch,
  26. runAot: context.runAot,
  27. runMinifyJs: context.runMinifyJs,
  28. runMinifyCss: context.runMinifyCss,
  29. optimizeJs: context.optimizeJs,
  30. bundler: context.bundler,
  31. inlineTemplates: context.inlineTemplates,
  32. },
  33. workerConfig: workerConfig
  34. };
  35. worker.on('message', function (msg) {
  36. if (msg.error) {
  37. reject(new errors_1.BuildError(msg.error));
  38. }
  39. else if (msg.reject) {
  40. var buildError = helpers_1.jsonToBuildError(msg.reject);
  41. reject(buildError);
  42. }
  43. else {
  44. resolve(msg.resolve);
  45. }
  46. killWorker(msg.pid);
  47. });
  48. worker.on('error', function (err) {
  49. logger_1.Logger.error("worker error, taskModule: " + taskModule + ", pid: " + worker.pid + ", error: " + err);
  50. });
  51. worker.on('exit', function (code) {
  52. logger_1.Logger.debug("worker exited, taskModule: " + taskModule + ", pid: " + worker.pid);
  53. });
  54. worker.send(msg);
  55. });
  56. }
  57. exports.runWorker = runWorker;
  58. function killWorker(pid) {
  59. for (var i = exports.workers.length - 1; i >= 0; i--) {
  60. if (exports.workers[i].worker.pid === pid) {
  61. try {
  62. exports.workers[i].worker.kill('SIGKILL');
  63. }
  64. catch (e) {
  65. logger_1.Logger.error("killWorker, " + pid + ": " + e);
  66. }
  67. finally {
  68. delete exports.workers[i].worker;
  69. exports.workers.splice(i, 1);
  70. }
  71. }
  72. }
  73. }
  74. function createWorker(taskModule) {
  75. for (var i = exports.workers.length - 1; i >= 0; i--) {
  76. if (exports.workers[i].task === taskModule) {
  77. try {
  78. exports.workers[i].worker.kill('SIGKILL');
  79. }
  80. catch (e) {
  81. logger_1.Logger.debug("createWorker, " + taskModule + " kill('SIGKILL'): " + e);
  82. }
  83. finally {
  84. delete exports.workers[i].worker;
  85. exports.workers.splice(i, 1);
  86. }
  87. }
  88. }
  89. try {
  90. var workerModule = path_1.join(__dirname, 'worker-process.js');
  91. var worker = child_process_1.fork(workerModule, process.argv, {
  92. env: {
  93. FORCE_COLOR: true,
  94. npm_config_argv: process.env.npm_config_argv
  95. }
  96. });
  97. logger_1.Logger.debug("worker created, taskModule: " + taskModule + ", pid: " + worker.pid);
  98. exports.workers.push({
  99. task: taskModule,
  100. worker: worker
  101. });
  102. return worker;
  103. }
  104. catch (e) {
  105. throw new errors_1.BuildError("unable to create worker-process, task: " + taskModule + ": " + e);
  106. }
  107. }
  108. exports.createWorker = createWorker;
  109. exports.workers = [];