@nsshunt/stsrunnerframework 2.0.32 → 2.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -66,6 +66,8 @@ var eIWMessageCommands = /* @__PURE__ */ function(eIWMessageCommands) {
66
66
  eIWMessageCommands["GetRunnersResponse"] = "__STS__GetRunnersResponse";
67
67
  eIWMessageCommands["PostWorkerMessage"] = "__STS__PostWorkerMessage";
68
68
  eIWMessageCommands["PostWorkerMessageResponse"] = "__STS__PostWorkerMessageResponse";
69
+ eIWMessageCommands["PostWorkerPreTerminateMessage"] = "__STS__PostWorkerPreTerminateMessage";
70
+ eIWMessageCommands["PostWorkerPreTerminateMessageResponse"] = "__STS__PostWorkerPreTerminateMessageResponse";
69
71
  return eIWMessageCommands;
70
72
  }({});
71
73
  var IRunnerState = /* @__PURE__ */ function(IRunnerState) {
@@ -1037,6 +1039,25 @@ var AbstractRunnerExecutionWorker = class {
1037
1039
  this.#error(`#PostWorkerMessageToWorkerManager(): [${error}]`);
1038
1040
  }
1039
1041
  };
1042
+ #PostWorkerPreTerminateMessageToWorkerManager = async (messagePayload) => {
1043
+ try {
1044
+ if (this.#collectorCollectorPort) {
1045
+ const response = await this.ProcessPreTerminateWorkerMessage(messagePayload);
1046
+ const message = {
1047
+ command: eIWMessageCommands.PostWorkerMessageResponse,
1048
+ payload: {
1049
+ messageId: messagePayload.payload.messageId,
1050
+ workerId: this.#workerId,
1051
+ response
1052
+ }
1053
+ };
1054
+ this.#collectorCollectorPort.postMessage(message);
1055
+ await (0, _nsshunt_stsutils.Sleep)(0);
1056
+ }
1057
+ } catch (error) {
1058
+ this.#error(`#PostWorkerPreTerminateMessageToWorkerManager(): [${error}]`);
1059
+ }
1060
+ };
1040
1061
  /**
1041
1062
  * Start a runner and, if valid, launch its execution loop.
1042
1063
  *
@@ -1420,6 +1441,9 @@ var AbstractRunnerExecutionWorker = class {
1420
1441
  async ProcessGenericWorkerMessage(messagePayload) {
1421
1442
  return {};
1422
1443
  }
1444
+ async ProcessPreTerminateWorkerMessage(messagePayload) {
1445
+ return {};
1446
+ }
1423
1447
  /**
1424
1448
  * Main inbound message dispatcher for this worker runtime.
1425
1449
  *
@@ -1503,6 +1527,10 @@ var AbstractRunnerExecutionWorker = class {
1503
1527
  this.#silly(`ProcessMessage::PostWorkerMessage`);
1504
1528
  this.#PostWorkerMessageToWorkerManager(payloadMessage);
1505
1529
  break;
1530
+ case eIWMessageCommands.PostWorkerPreTerminateMessage:
1531
+ this.#silly(`ProcessMessage::PostWorkerPreTerminateMessage`);
1532
+ this.#PostWorkerPreTerminateMessageToWorkerManager(payloadMessage);
1533
+ break;
1506
1534
  default: this.#warn(`ProcessMessage::default: Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);
1507
1535
  }
1508
1536
  } catch (error) {
@@ -4486,13 +4514,24 @@ var WorkerInstance = class {
4486
4514
  try {
4487
4515
  const runners = this.GetAllRunnersEx();
4488
4516
  const promArray = [];
4517
+ const microDelayForPreTerminate = 500;
4518
+ const microDelayForTerminate = 500;
4489
4519
  for (let i = 0; i < runners.length; i++) promArray.push(runners[i].Terminate());
4490
4520
  const retVal = Promise.all(promArray);
4491
- if (this.worker) setTimeout(() => {
4492
- this.worker.terminate();
4493
- this.#logger.debug(`_TerminateWorker(): Terminated worker: [${this.id}]`);
4494
- this.#workerRegistry.DeleteWorker(this.id);
4495
- }, 500);
4521
+ if (this.worker) {
4522
+ await (0, _nsshunt_stsutils.Sleep)(microDelayForPreTerminate);
4523
+ this.#logger.debug(chalk.rgb(150, 170, 90)(`Terminate(): Sending Pre Terminate worker command ...`));
4524
+ const retValPreTerminate = await this.#messageBroker.SendMessageToWorkerForWorkerWithCallBack(this, eIWMessageCommands.PostWorkerPreTerminateMessage, {});
4525
+ this.#logger.debug(chalk.rgb(150, 170, 90)(`Terminate(): Pre Terminate worker response: [${JSON.stringify(retValPreTerminate, null, 2)}]`));
4526
+ }
4527
+ setTimeout(() => {
4528
+ if (this.worker) if (this.options.mocked === false) {
4529
+ this.worker.terminate();
4530
+ this.#logger.debug(`Terminate(): Terminated worker: [${this.id}]`);
4531
+ this.#workerRegistry.DeleteWorker(this.id);
4532
+ } else this.#logger.debug(`Terminate(): Terminated worker: [${this.id}] (Mocked)`);
4533
+ else this.#logger.warn(`Terminate(): Could not terminate worker: [${this.id}] - this.worker not set`);
4534
+ }, microDelayForTerminate);
4496
4535
  return retVal;
4497
4536
  } catch (error) {
4498
4537
  this.#logger.error(`_TerminateWorker(): Error: [${error}]`);
@@ -6612,7 +6651,7 @@ var STSWorkerManager = class {
6612
6651
  * - this does not automatically terminate all workers
6613
6652
  * - callers should explicitly terminate workers first if desired
6614
6653
  */
6615
- Terminate() {
6654
+ async Terminate() {
6616
6655
  this.options.logger.debug(`STSWorkerManager:Terminate()`);
6617
6656
  this.#archiveManager.Terminate();
6618
6657
  }