Fix error propagation into the UI server
[e-mobility-charging-stations-simulator.git] / src / charging-station / WorkerBroadcastChannel.ts
index ea89dc3dbf65f093f0a0bbfacdfdb32aab3c5f62..652a27e1831e7fb7f9815745511de6c68a7fe54f 100644 (file)
@@ -1,11 +1,15 @@
 import { BroadcastChannel } from 'worker_threads';
 
-import BaseError from '../exception/BaseError';
-import {
+import type { JsonType } from '../types/JsonType';
+import type {
   BroadcastChannelRequest,
   BroadcastChannelResponse,
   MessageEvent,
 } from '../types/WorkerBroadcastChannel';
+import logger from '../utils/Logger';
+import Utils from '../utils/Utils';
+
+const moduleName = 'WorkerBroadcastChannel';
 
 export default abstract class WorkerBroadcastChannel extends BroadcastChannel {
   protected constructor() {
@@ -20,17 +24,33 @@ export default abstract class WorkerBroadcastChannel extends BroadcastChannel {
     this.postMessage(response);
   }
 
-  protected isRequest(message: any): boolean {
-    return Array.isArray(message) && message.length === 3;
+  protected isRequest(message: JsonType[]): boolean {
+    return Array.isArray(message) === true && message.length === 3;
   }
 
-  protected isResponse(message: any): boolean {
-    return Array.isArray(message) && message.length === 2;
+  protected isResponse(message: JsonType[]): boolean {
+    return Array.isArray(message) === true && message.length === 2;
   }
 
-  protected validateMessageEvent(messageEvent: MessageEvent): void {
+  protected validateMessageEvent(messageEvent: MessageEvent): MessageEvent | false {
     if (Array.isArray(messageEvent.data) === false) {
-      throw new BaseError('Worker broadcast channel protocol message event data is not an array');
+      logger.error(
+        this.logPrefix(moduleName, 'validateMessageEvent') +
+          ' Worker broadcast channel protocol message event data is not an array'
+      );
+      return false;
+    }
+    if (Utils.validateUUID(messageEvent.data[0]) === false) {
+      logger.error(
+        this.logPrefix(moduleName, 'validateMessageEvent') +
+          ' Worker broadcast channel protocol message event data UUID field is invalid'
+      );
+      return false;
     }
+    return messageEvent;
+  }
+
+  private logPrefix(modName: string, methodName: string): string {
+    return Utils.logPrefix(` Worker Broadcast Channel | ${modName}.${methodName}:`);
   }
 }