repositories
/
e-mobility-charging-stations-simulator.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: fix off-by-one in ATG statuses handling
[e-mobility-charging-stations-simulator.git]
/
src
/
charging-station
/
ocpp
/
2.0
/
OCPP20IncomingRequestService.ts
diff --git
a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
index 0a274caf0327e1fb64c9db385af7f5163b2a8c90..db509ecd9ba939ba8c99241604cdc15c6e968f6b 100644
(file)
--- a/
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
+++ b/
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
@@
-1,58
+1,65
@@
// Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
// Partial Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
-import type { JSONSchemaType } from 'ajv'
;
+import type { JSONSchemaType } from 'ajv'
-import type { ChargingStation } from '../../../charging-station';
-import { OCPPError } from '../../../exception';
+import { OCPP20ServiceUtils } from './OCPP20ServiceUtils.js'
+import type { ChargingStation } from '../../../charging-station/index.js'
+import { OCPPError } from '../../../exception/index.js'
import {
ErrorType,
type IncomingRequestHandler,
import {
ErrorType,
type IncomingRequestHandler,
- type JsonObject,
type JsonType,
type OCPP20ClearCacheRequest,
OCPP20IncomingRequestCommand,
type JsonType,
type OCPP20ClearCacheRequest,
OCPP20IncomingRequestCommand,
- OCPPVersion
,
-} from '../../../types
';
-import { logger } from '../../../utils
';
-import { OCPP
20ServiceUtils, OCPPIncomingRequestService } from '../internal';
+ OCPPVersion
+} from '../../../types
/index.js'
+import { logger } from '../../../utils
/index.js'
+import { OCPP
IncomingRequestService } from '../OCPPIncomingRequestService.js'
-const moduleName = 'OCPP20IncomingRequestService'
;
+const moduleName = 'OCPP20IncomingRequestService'
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
- protected jsonSchemas: Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonObject>>;
- private incomingRequestHandlers: Map<OCPP20IncomingRequestCommand, IncomingRequestHandler>;
+ protected jsonSchemas: Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonType>>
+ private readonly incomingRequestHandlers: Map<
+ OCPP20IncomingRequestCommand,
+ IncomingRequestHandler
+ >
- public constructor() {
-
if (new.target?
.name === moduleName) {
- throw new TypeError(`Cannot construct ${new.target?.name} instances directly`);
- }
- super(OCPPVersion.VERSION_20)
;
+ public constructor
() {
+
// if (new.target
.name === moduleName) {
+ // throw new TypeError(`Cannot construct ${new.target.name} instances directly`)
+
//
}
+ super(OCPPVersion.VERSION_20)
this.incomingRequestHandlers = new Map<OCPP20IncomingRequestCommand, IncomingRequestHandler>([
this.incomingRequestHandlers = new Map<OCPP20IncomingRequestCommand, IncomingRequestHandler>([
- [OCPP20IncomingRequestCommand.CLEAR_CACHE, this.handleRequestClearCache.bind(this)]
,
- ])
;
- this.jsonSchemas = new Map<OCPP20IncomingRequestCommand, JSONSchemaType<Json
Object
>>([
+ [OCPP20IncomingRequestCommand.CLEAR_CACHE, this.handleRequestClearCache.bind(this)]
+ ])
+ this.jsonSchemas = new Map<OCPP20IncomingRequestCommand, JSONSchemaType<Json
Type
>>([
[
OCPP20IncomingRequestCommand.CLEAR_CACHE,
OCPP20ServiceUtils.parseJsonSchemaFile<OCPP20ClearCacheRequest>(
[
OCPP20IncomingRequestCommand.CLEAR_CACHE,
OCPP20ServiceUtils.parseJsonSchemaFile<OCPP20ClearCacheRequest>(
- '
../../../
assets/json-schemas/ocpp/2.0/ClearCacheRequest.json',
+ 'assets/json-schemas/ocpp/2.0/ClearCacheRequest.json',
moduleName,
'constructor'
moduleName,
'constructor'
- ),
- ],
- ]);
- this.validatePayload.bind(this);
+ )
+ ]
+ ])
+ this.validatePayload = this.validatePayload.bind(this) as (
+ chargingStation: ChargingStation,
+ commandName: OCPP20IncomingRequestCommand,
+ commandPayload: JsonType
+ ) => boolean
}
}
- public async incomingRequestHandler(
+ public async incomingRequestHandler
<ReqType extends JsonType, ResType extends JsonType>
(
chargingStation: ChargingStation,
messageId: string,
commandName: OCPP20IncomingRequestCommand,
chargingStation: ChargingStation,
messageId: string,
commandName: OCPP20IncomingRequestCommand,
- commandPayload:
Json
Type
+ commandPayload:
Req
Type
): Promise<void> {
): Promise<void> {
- let response:
JsonType;
+ let response:
ResType
if (
if (
- chargingStation.
getOcppStrictCompliance()
=== true &&
- chargingStation.i
sInPendingState() === true
&&
+ chargingStation.
stationInfo?.ocppStrictCompliance
=== true &&
+ chargingStation.i
nPendingState()
&&
(commandName === OCPP20IncomingRequestCommand.REQUEST_START_TRANSACTION ||
commandName === OCPP20IncomingRequestCommand.REQUEST_STOP_TRANSACTION)
) {
(commandName === OCPP20IncomingRequestCommand.REQUEST_START_TRANSACTION ||
commandName === OCPP20IncomingRequestCommand.REQUEST_STOP_TRANSACTION)
) {
@@
-60,36
+67,37
@@
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
ErrorType.SECURITY_ERROR,
`${commandName} cannot be issued to handle request PDU ${JSON.stringify(
commandPayload,
ErrorType.SECURITY_ERROR,
`${commandName} cannot be issued to handle request PDU ${JSON.stringify(
commandPayload,
-
null
,
+
undefined
,
2
)} while the charging station is in pending state on the central server`,
commandName,
commandPayload
2
)} while the charging station is in pending state on the central server`,
commandName,
commandPayload
- )
;
+ )
}
if (
}
if (
- chargingStation.isRegistered()
=== true
||
- (chargingStation.
getOcppStrictCompliance()
=== false &&
- chargingStation.i
sInUnknownState() === true
)
+ chargingStation.isRegistered() ||
+ (chargingStation.
stationInfo?.ocppStrictCompliance
=== false &&
+ chargingStation.i
nUnknownState()
)
) {
if (
) {
if (
- this.incomingRequestHandlers.has(commandName)
=== true
&&
- OCPP20ServiceUtils.isIncomingRequestCommandSupported(chargingStation, commandName)
=== true
+ this.incomingRequestHandlers.has(commandName) &&
+ OCPP20ServiceUtils.isIncomingRequestCommandSupported(chargingStation, commandName)
) {
try {
) {
try {
- this.validatePayload(chargingStation, commandName, commandPayload)
;
+ this.validatePayload(chargingStation, commandName, commandPayload)
// Call the method to build the response
// Call the method to build the response
- response = await this.incomingRequestHandlers.get(commandName)(
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ response = (await this.incomingRequestHandlers.get(commandName)!(
chargingStation,
commandPayload
chargingStation,
commandPayload
- )
;
+ )
) as ResType
} catch (error) {
// Log
logger.error(
`${chargingStation.logPrefix()} ${moduleName}.incomingRequestHandler: Handle incoming request error:`,
error
} catch (error) {
// Log
logger.error(
`${chargingStation.logPrefix()} ${moduleName}.incomingRequestHandler: Handle incoming request error:`,
error
- )
;
- throw error
;
+ )
+ throw error
}
} else {
// Throw exception
}
} else {
// Throw exception
@@
-97,24
+105,24
@@
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
ErrorType.NOT_IMPLEMENTED,
`${commandName} is not implemented to handle request PDU ${JSON.stringify(
commandPayload,
ErrorType.NOT_IMPLEMENTED,
`${commandName} is not implemented to handle request PDU ${JSON.stringify(
commandPayload,
-
null
,
+
undefined
,
2
)}`,
commandName,
commandPayload
2
)}`,
commandName,
commandPayload
- )
;
+ )
}
} else {
throw new OCPPError(
ErrorType.SECURITY_ERROR,
`${commandName} cannot be issued to handle request PDU ${JSON.stringify(
commandPayload,
}
} else {
throw new OCPPError(
ErrorType.SECURITY_ERROR,
`${commandName} cannot be issued to handle request PDU ${JSON.stringify(
commandPayload,
-
null
,
+
undefined
,
2
)} while the charging station is not registered on the central server.`,
commandName,
commandPayload
2
)} while the charging station is not registered on the central server.`,
commandName,
commandPayload
- )
;
+ )
}
// Send the built response
await chargingStation.ocppRequestService.sendResponse(
}
// Send the built response
await chargingStation.ocppRequestService.sendResponse(
@@
-122,25
+130,26
@@
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
messageId,
response,
commandName
messageId,
response,
commandName
- )
;
+ )
}
}
- private validatePayload(
+ private validatePayload
(
chargingStation: ChargingStation,
commandName: OCPP20IncomingRequestCommand,
commandPayload: JsonType
): boolean {
chargingStation: ChargingStation,
commandName: OCPP20IncomingRequestCommand,
commandPayload: JsonType
): boolean {
- if (this.jsonSchemas.has(commandName)
=== true
) {
+ if (this.jsonSchemas.has(commandName)) {
return this.validateIncomingRequestPayload(
chargingStation,
commandName,
return this.validateIncomingRequestPayload(
chargingStation,
commandName,
- this.jsonSchemas.get(commandName),
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.jsonSchemas.get(commandName)!,
commandPayload
commandPayload
- )
;
+ )
}
logger.warn(
`${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema found for command '${commandName}' PDU validation`
}
logger.warn(
`${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema found for command '${commandName}' PDU validation`
- )
;
- return false
;
+ )
+ return false
}
}
}
}