@nsshunt/stsrunnerframework 2.0.33 → 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.mjs CHANGED
@@ -65,6 +65,8 @@ var eIWMessageCommands = /* @__PURE__ */ function(eIWMessageCommands) {
65
65
  eIWMessageCommands["GetRunnersResponse"] = "__STS__GetRunnersResponse";
66
66
  eIWMessageCommands["PostWorkerMessage"] = "__STS__PostWorkerMessage";
67
67
  eIWMessageCommands["PostWorkerMessageResponse"] = "__STS__PostWorkerMessageResponse";
68
+ eIWMessageCommands["PostWorkerPreTerminateMessage"] = "__STS__PostWorkerPreTerminateMessage";
69
+ eIWMessageCommands["PostWorkerPreTerminateMessageResponse"] = "__STS__PostWorkerPreTerminateMessageResponse";
68
70
  return eIWMessageCommands;
69
71
  }({});
70
72
  var IRunnerState = /* @__PURE__ */ function(IRunnerState) {
@@ -1036,6 +1038,25 @@ var AbstractRunnerExecutionWorker = class {
1036
1038
  this.#error(`#PostWorkerMessageToWorkerManager(): [${error}]`);
1037
1039
  }
1038
1040
  };
1041
+ #PostWorkerPreTerminateMessageToWorkerManager = async (messagePayload) => {
1042
+ try {
1043
+ if (this.#collectorCollectorPort) {
1044
+ const response = await this.ProcessPreTerminateWorkerMessage(messagePayload);
1045
+ const message = {
1046
+ command: eIWMessageCommands.PostWorkerMessageResponse,
1047
+ payload: {
1048
+ messageId: messagePayload.payload.messageId,
1049
+ workerId: this.#workerId,
1050
+ response
1051
+ }
1052
+ };
1053
+ this.#collectorCollectorPort.postMessage(message);
1054
+ await Sleep(0);
1055
+ }
1056
+ } catch (error) {
1057
+ this.#error(`#PostWorkerPreTerminateMessageToWorkerManager(): [${error}]`);
1058
+ }
1059
+ };
1039
1060
  /**
1040
1061
  * Start a runner and, if valid, launch its execution loop.
1041
1062
  *
@@ -1419,6 +1440,9 @@ var AbstractRunnerExecutionWorker = class {
1419
1440
  async ProcessGenericWorkerMessage(messagePayload) {
1420
1441
  return {};
1421
1442
  }
1443
+ async ProcessPreTerminateWorkerMessage(messagePayload) {
1444
+ return {};
1445
+ }
1422
1446
  /**
1423
1447
  * Main inbound message dispatcher for this worker runtime.
1424
1448
  *
@@ -1502,6 +1526,10 @@ var AbstractRunnerExecutionWorker = class {
1502
1526
  this.#silly(`ProcessMessage::PostWorkerMessage`);
1503
1527
  this.#PostWorkerMessageToWorkerManager(payloadMessage);
1504
1528
  break;
1529
+ case eIWMessageCommands.PostWorkerPreTerminateMessage:
1530
+ this.#silly(`ProcessMessage::PostWorkerPreTerminateMessage`);
1531
+ this.#PostWorkerPreTerminateMessageToWorkerManager(payloadMessage);
1532
+ break;
1505
1533
  default: this.#warn(`ProcessMessage::default: Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);
1506
1534
  }
1507
1535
  } catch (error) {
@@ -4485,13 +4513,24 @@ var WorkerInstance = class {
4485
4513
  try {
4486
4514
  const runners = this.GetAllRunnersEx();
4487
4515
  const promArray = [];
4516
+ const microDelayForPreTerminate = 500;
4517
+ const microDelayForTerminate = 500;
4488
4518
  for (let i = 0; i < runners.length; i++) promArray.push(runners[i].Terminate());
4489
4519
  const retVal = Promise.all(promArray);
4490
- if (this.worker) setTimeout(() => {
4491
- this.worker.terminate();
4492
- this.#logger.debug(`_TerminateWorker(): Terminated worker: [${this.id}]`);
4493
- this.#workerRegistry.DeleteWorker(this.id);
4494
- }, 500);
4520
+ if (this.worker) {
4521
+ await Sleep(microDelayForPreTerminate);
4522
+ this.#logger.debug(chalk.rgb(150, 170, 90)(`Terminate(): Sending Pre Terminate worker command ...`));
4523
+ const retValPreTerminate = await this.#messageBroker.SendMessageToWorkerForWorkerWithCallBack(this, eIWMessageCommands.PostWorkerPreTerminateMessage, {});
4524
+ this.#logger.debug(chalk.rgb(150, 170, 90)(`Terminate(): Pre Terminate worker response: [${JSON.stringify(retValPreTerminate, null, 2)}]`));
4525
+ }
4526
+ setTimeout(() => {
4527
+ if (this.worker) if (this.options.mocked === false) {
4528
+ this.worker.terminate();
4529
+ this.#logger.debug(`Terminate(): Terminated worker: [${this.id}]`);
4530
+ this.#workerRegistry.DeleteWorker(this.id);
4531
+ } else this.#logger.debug(`Terminate(): Terminated worker: [${this.id}] (Mocked)`);
4532
+ else this.#logger.warn(`Terminate(): Could not terminate worker: [${this.id}] - this.worker not set`);
4533
+ }, microDelayForTerminate);
4495
4534
  return retVal;
4496
4535
  } catch (error) {
4497
4536
  this.#logger.error(`_TerminateWorker(): Error: [${error}]`);
@@ -6611,7 +6650,7 @@ var STSWorkerManager = class {
6611
6650
  * - this does not automatically terminate all workers
6612
6651
  * - callers should explicitly terminate workers first if desired
6613
6652
  */
6614
- Terminate() {
6653
+ async Terminate() {
6615
6654
  this.options.logger.debug(`STSWorkerManager:Terminate()`);
6616
6655
  this.#archiveManager.Terminate();
6617
6656
  }