- parentPort.postMessage(MessageChannelUtils.buildUpdatedMessage(this));
- }
-
- private async onMessage(data: Data): Promise<void> {
- let messageType: number;
- let messageId: string;
- let commandName: IncomingRequestCommand;
- let commandPayload: JsonType;
- let errorType: ErrorType;
- let errorMessage: string;
- let errorDetails: JsonType;
- let responseCallback: ResponseCallback;
- let errorCallback: ErrorCallback;
- let requestCommandName: RequestCommand | IncomingRequestCommand;
- let requestPayload: JsonType;
- let cachedRequest: CachedRequest;
- let errMsg: string;
+ parentPort?.postMessage(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));
+ }
+
+ private async onMessage(data: RawData): Promise<void> {
+ let request: IncomingRequest | Response | ErrorResponse | undefined;
+ let messageType: number | undefined;
+ let errorMsg: string;