repositories
/
e-mobility-charging-stations-simulator.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: resolve promise on charging station events once
[e-mobility-charging-stations-simulator.git]
/
src
/
charging-station
/
ChargingStationWorker.ts
diff --git
a/src/charging-station/ChargingStationWorker.ts
b/src/charging-station/ChargingStationWorker.ts
index 6201bf07e2b52fe7e6d1931412da74e89043717c..d9e462d064967b75255dc333f3926f28b14b4cf4 100644
(file)
--- a/
src/charging-station/ChargingStationWorker.ts
+++ b/
src/charging-station/ChargingStationWorker.ts
@@
-1,6
+1,5
@@
// Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
// Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
-import { AsyncResource } from 'node:async_hooks';
import { parentPort } from 'node:worker_threads';
import { ThreadWorker } from 'poolifier';
import { parentPort } from 'node:worker_threads';
import { ThreadWorker } from 'poolifier';
@@
-11,30
+10,23
@@
import type { ChargingStationWorkerData } from '../types';
import { Configuration } from '../utils';
import { type WorkerMessage, WorkerMessageEvents } from '../worker';
import { Configuration } from '../utils';
import { type WorkerMessage, WorkerMessageEvents } from '../worker';
-const moduleName = 'ChargingStationWorker';
-
/**
* Creates and starts a charging station instance
*
/**
* Creates and starts a charging station instance
*
- * @param data -
workerData
+ * @param data -
data sent to worker
*/
const startChargingStation = (data?: ChargingStationWorkerData): void => {
new ChargingStation(data!.index, data!.templateFile).start();
};
*/
const startChargingStation = (data?: ChargingStationWorkerData): void => {
new ChargingStation(data!.index, data!.templateFile).start();
};
-class ChargingStationWorker
extends AsyncResource
{
+class ChargingStationWorker
<Data extends ChargingStationWorkerData>
{
constructor() {
constructor() {
- super(moduleName);
// Add message listener to create and start charging station from the main thread
// Add message listener to create and start charging station from the main thread
- parentPort?.on('message', (message: WorkerMessage<
ChargingStationWorker
Data>) => {
+ parentPort?.on('message', (message: WorkerMessage<Data>) => {
switch (message.event) {
case WorkerMessageEvents.startWorkerElement:
try {
switch (message.event) {
case WorkerMessageEvents.startWorkerElement:
try {
- this.runInAsyncScope(
- startChargingStation.bind(this) as (data?: ChargingStationWorkerData) => void,
- this,
- message.data,
- );
+ startChargingStation(message.data);
parentPort?.postMessage({
event: WorkerMessageEvents.startedWorkerElement,
});
parentPort?.postMessage({
event: WorkerMessageEvents.startedWorkerElement,
});
@@
-42,6
+34,7
@@
class ChargingStationWorker extends AsyncResource {
parentPort?.postMessage({
event: WorkerMessageEvents.startWorkerElementError,
data: {
parentPort?.postMessage({
event: WorkerMessageEvents.startWorkerElementError,
data: {
+ name: (error as Error).name,
message: (error as Error).message,
stack: (error as Error).stack,
},
message: (error as Error).message,
stack: (error as Error).stack,
},
@@
-61,9
+54,11
@@
class ChargingStationWorker extends AsyncResource {
}
}
}
}
-export let chargingStationWorker: ChargingStationWorker | ThreadWorker<ChargingStationWorkerData>;
+export let chargingStationWorker:
+ | ChargingStationWorker<ChargingStationWorkerData>
+ | ThreadWorker<ChargingStationWorkerData>;
if (Configuration.workerPoolInUse()) {
chargingStationWorker = new ThreadWorker<ChargingStationWorkerData>(startChargingStation);
} else {
if (Configuration.workerPoolInUse()) {
chargingStationWorker = new ThreadWorker<ChargingStationWorkerData>(startChargingStation);
} else {
- chargingStationWorker = new ChargingStationWorker();
+ chargingStationWorker = new ChargingStationWorker
<ChargingStationWorkerData>
();
}
}