} else if (!skipBufferingOnError) {
// Buffer it
this.chargingStation.addToMessageQueue(messageToSend);
- // Reject it
- return rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `WebSocket closed for message id '${messageId}' with content '${messageToSend}', message buffered`, commandParams?.details ?? {}));
+ // Reject it but keep the request in the cache
+ reject(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `WebSocket closed for message id '${messageId}' with content '${messageToSend}', message buffered`, commandParams?.details ?? {}));
}
// Response?
- if (messageType === MessageType.CALL_RESULT_MESSAGE) {
+ if (messageType !== MessageType.CALL_MESSAGE) {
// Yes: send Ok
resolve(commandName);
- } else if (messageType === MessageType.CALL_ERROR_MESSAGE) {
+ } else {
// Send timeout
- setTimeout(() => rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `Timeout for message id '${messageId}' with content '${messageToSend}'`, commandParams?.details ?? {})), Constants.OCPP_ERROR_TIMEOUT);
+ setTimeout(() => rejectCallback(new OCPPError(commandParams?.code ?? ErrorType.GENERIC_ERROR, commandParams?.message ?? `Timeout for message id '${messageId}' with content '${messageToSend}'`, commandParams?.details ?? {})), Constants.OCPP_SOCKET_TIMEOUT);
}
/**
}
// Send the response
await self.ocppResponseService.handleResponse(commandName as RequestCommand, payload, requestPayload);
+ self.chargingStation.requests.delete(messageId);
resolve(payload);
}
/**
- * Function that will receive the request's rejection
+ * Function that will receive the request's error response
*
* @param error
*/
if (self.chargingStation.getEnableStatistics()) {
self.chargingStation.performanceStatistics.addRequestStatistic(commandName, MessageType.CALL_ERROR_MESSAGE);
}
- logger.debug(`${self.chargingStation.logPrefix()} Error: %j occurred when calling command %s with parameters: %j`, error, commandName, commandParams);
- // Build Exception
- // eslint-disable-next-line no-empty-function
- self.chargingStation.requests.set(messageId, [() => { }, () => { }, {}]);
- // Send error
+ logger.debug(`${self.chargingStation.logPrefix()} Error %j occurred when calling command %s with parameters %j`, error, commandName, commandParams);
+ self.chargingStation.requests.delete(messageId);
reject(error);
}
});
// Request
case MessageType.CALL_MESSAGE:
// Build request
- this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandParams as Record<string, unknown>]);
+ this.chargingStation.requests.set(messageId, [responseCallback, rejectCallback, commandName, commandParams as Record<string, unknown>]);
messageToSend = JSON.stringify([messageType, messageId, commandName, commandParams]);
break;
// Response