Fix error handling at OCPP message sending
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIHttpServer.ts
index 7dfff0adf5c587284d2c32663fcd4d24ddafc423..37c579dc56a552dc26dbd57ae515378820e9e2d9 100644 (file)
@@ -42,11 +42,11 @@ export default class UIHttpServer extends AbstractUIServer {
     try {
       if (this.responseHandlers.has(uuid) === true) {
         const res = this.responseHandlers.get(uuid) as ServerResponse;
-        res.writeHead(this.responseStatusToStatusCode(payload.status), {
-          'Content-Type': 'application/json',
-        });
-        res.end(JSON.stringify(payload));
-        this.responseHandlers.delete(uuid);
+        res
+          .writeHead(this.responseStatusToStatusCode(payload.status), {
+            'Content-Type': 'application/json',
+          })
+          .end(JSON.stringify(payload));
       } else {
         logger.error(
           `${this.logPrefix(moduleName, 'sendResponse')} Response for unknown request id: ${uuid}`
@@ -57,6 +57,8 @@ export default class UIHttpServer extends AbstractUIServer {
         `${this.logPrefix(moduleName, 'sendResponse')} Error at sending response id '${uuid}':`,
         error
       );
+    } finally {
+      this.responseHandlers.delete(uuid);
     }
   }
 
@@ -70,12 +72,14 @@ export default class UIHttpServer extends AbstractUIServer {
   private requestListener(req: IncomingMessage, res: ServerResponse): void {
     this.authenticate(req, (err) => {
       if (err) {
-        res.setHeader('Content-Type', 'text/plain');
-        res.setHeader('WWW-Authenticate', 'Basic realm=users');
-        res.writeHead(StatusCodes.UNAUTHORIZED);
-        res.end(`${StatusCodes.UNAUTHORIZED} Unauthorized`);
+        res
+          .writeHead(StatusCodes.UNAUTHORIZED, {
+            'Content-Type': 'text/plain',
+            'WWW-Authenticate': 'Basic realm=users',
+          })
+          .end(`${StatusCodes.UNAUTHORIZED} Unauthorized`)
+          .destroy();
         req.destroy();
-        res.destroy();
       }
     });
     // Expected request URL pathname: /ui/:version/:procedureName