Permit to run code in async scope in the OCPP stack
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / OCPPRequestService.ts
index 7077a28bb88c839590516e3af49a2b82964e8c5b..68338670aa1c4dd710ec1310568328e7d13dd198 100644 (file)
@@ -37,6 +37,7 @@ export default abstract class OCPPRequestService {
     this.ajv = new Ajv();
     ajvFormats(this.ajv);
     this.requestHandler.bind(this);
+    this.sendMessage.bind(this);
     this.sendResponse.bind(this);
     this.sendError.bind(this);
     this.internalSendMessage.bind(this);
@@ -70,7 +71,9 @@ export default abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error);
+      this.handleSendMessageError(chargingStation, commandName, error as Error, {
+        throwError: true,
+      });
     }
   }
 
@@ -90,7 +93,7 @@ export default abstract class OCPPRequestService {
         commandName
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error);
+      this.handleSendMessageError(chargingStation, commandName, error as Error);
     }
   }
 
@@ -114,7 +117,7 @@ export default abstract class OCPPRequestService {
         params
       );
     } catch (error) {
-      this.handleRequestError(chargingStation, commandName, error as Error, { throwError: false });
+      this.handleSendMessageError(chargingStation, commandName, error as Error);
     }
   }
 
@@ -135,6 +138,7 @@ export default abstract class OCPPRequestService {
       `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Request PDU is invalid: %j`,
       validate.errors
     );
+    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
     throw new OCPPError(
       OCPPServiceUtils.ajvErrorsToErrorType(validate.errors),
       'Request PDU is invalid',
@@ -355,14 +359,14 @@ export default abstract class OCPPRequestService {
     }
   }
 
-  private handleRequestError(
+  private handleSendMessageError(
     chargingStation: ChargingStation,
     commandName: RequestCommand | IncomingRequestCommand,
     error: Error,
-    params: HandleErrorParams<EmptyObject> = { throwError: true }
+    params: HandleErrorParams<EmptyObject> = { throwError: false }
   ): void {
     logger.error(`${chargingStation.logPrefix()} Request command '${commandName}' error:`, error);
-    if (params?.throwError) {
+    if (params?.throwError === true) {
       throw error;
     }
   }