+ parentPort?.postMessage(MessageChannelUtils.buildUpdatedMessage(this));
+ }
+
+ private getCachedRequest(messageType: MessageType, messageId: string): CachedRequest | undefined {
+ const cachedRequest = this.requests.get(messageId);
+ if (Array.isArray(cachedRequest) === true) {
+ return cachedRequest;
+ }
+ throw new OCPPError(
+ ErrorType.PROTOCOL_ERROR,
+ `Cached request for message id ${messageId} ${OCPPServiceUtils.getMessageTypeString(
+ messageType
+ )} is not an array`,
+ undefined,
+ cachedRequest as JsonType
+ );
+ }
+
+ private async handleIncomingMessage(request: IncomingRequest): Promise<void> {
+ const [messageType, messageId, commandName, commandPayload] = request;
+ if (this.getEnableStatistics() === true) {
+ this.performanceStatistics?.addRequestStatistic(commandName, messageType);
+ }
+ logger.debug(
+ `${this.logPrefix()} << Command '${commandName}' received request payload: ${JSON.stringify(
+ request
+ )}`
+ );
+ // Process the message
+ await this.ocppIncomingRequestService.incomingRequestHandler(
+ this,
+ messageId,
+ commandName,
+ commandPayload
+ );
+ }
+
+ private handleResponseMessage(response: Response): void {
+ const [messageType, messageId, commandPayload] = response;
+ if (this.requests.has(messageId) === false) {
+ // Error
+ throw new OCPPError(
+ ErrorType.INTERNAL_ERROR,
+ `Response for unknown message id ${messageId}`,
+ undefined,
+ commandPayload
+ );
+ }
+ // Respond
+ const [responseCallback, , requestCommandName, requestPayload] = this.getCachedRequest(
+ messageType,
+ messageId
+ );
+ logger.debug(
+ `${this.logPrefix()} << Command '${
+ requestCommandName ?? Constants.UNKNOWN_COMMAND
+ }' received response payload: ${JSON.stringify(response)}`
+ );
+ responseCallback(commandPayload, requestPayload);
+ }
+
+ private handleErrorMessage(errorResponse: ErrorResponse): void {
+ const [messageType, messageId, errorType, errorMessage, errorDetails] = errorResponse;
+ if (this.requests.has(messageId) === false) {
+ // Error
+ throw new OCPPError(
+ ErrorType.INTERNAL_ERROR,
+ `Error response for unknown message id ${messageId}`,
+ undefined,
+ { errorType, errorMessage, errorDetails }
+ );
+ }
+ const [, errorCallback, requestCommandName] = this.getCachedRequest(messageType, messageId);
+ logger.debug(
+ `${this.logPrefix()} << Command '${
+ requestCommandName ?? Constants.UNKNOWN_COMMAND
+ }' received error response payload: ${JSON.stringify(errorResponse)}`
+ );
+ errorCallback(new OCPPError(errorType, errorMessage, requestCommandName, errorDetails));