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
refactor: convert remote stop transaction to two stages request
[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 e0b8fa54fefac42f70d7812e2b84f496abc46390..67f3a61b492529ca0a2ae2bb487200035ff59569 100644
(file)
--- a/
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
+++ b/
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
@@
-1,6
+1,6
@@
-// Partial Copyright Jerome Benoit. 2021-202
3
. All Rights Reserved.
+// Partial Copyright Jerome Benoit. 2021-202
4
. All Rights Reserved.
-import type {
JSONSchemaType
} from 'ajv'
+import type {
ValidateFunction
} from 'ajv'
import { OCPP20ServiceUtils } from './OCPP20ServiceUtils.js'
import type { ChargingStation } from '../../../charging-station/index.js'
import { OCPP20ServiceUtils } from './OCPP20ServiceUtils.js'
import type { ChargingStation } from '../../../charging-station/index.js'
@@
-19,35
+19,39
@@
import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService.js'
const moduleName = 'OCPP20IncomingRequestService'
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
const moduleName = 'OCPP20IncomingRequestService'
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
- protected jsonSchemas: Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonType>>
+ protected payloadValidateFunctions: Map<OCPP20IncomingRequestCommand, ValidateFunction<JsonType>>
+
private readonly incomingRequestHandlers: Map<
OCPP20IncomingRequestCommand,
IncomingRequestHandler
>
public constructor () {
private readonly incomingRequestHandlers: Map<
OCPP20IncomingRequestCommand,
IncomingRequestHandler
>
public constructor () {
- // if (new.target
?
.name === moduleName) {
- // throw new TypeError(`Cannot construct ${new.target
?
.name} instances directly`)
+ // 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>([
[OCPP20IncomingRequestCommand.CLEAR_CACHE, this.handleRequestClearCache.bind(this)]
])
// }
super(OCPPVersion.VERSION_20)
this.incomingRequestHandlers = new Map<OCPP20IncomingRequestCommand, IncomingRequestHandler>([
[OCPP20IncomingRequestCommand.CLEAR_CACHE, this.handleRequestClearCache.bind(this)]
])
- this.jsonSchemas = new Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonType>>([
+ this.payloadValidateFunctions = new Map<
+ OCPP20IncomingRequestCommand,
+ ValidateFunction<JsonType>
+ >([
[
OCPP20IncomingRequestCommand.CLEAR_CACHE,
[
OCPP20IncomingRequestCommand.CLEAR_CACHE,
- OCPP20ServiceUtils.parseJsonSchemaFile<OCPP20ClearCacheRequest>(
- 'assets/json-schemas/ocpp/2.0/ClearCacheRequest.json',
- moduleName,
- 'constructor'
- )
+ this.ajv
+ .compile(
+ OCPP20ServiceUtils.parseJsonSchemaFile<OCPP20ClearCacheRequest>(
+ 'assets/json-schemas/ocpp/2.0/ClearCacheRequest.json',
+ moduleName,
+ 'constructor'
+ )
+ )
+ .bind(this)
]
])
]
])
- this.validatePayload = this.validatePayload.bind(this) as (
- chargingStation: ChargingStation,
- commandName: OCPP20IncomingRequestCommand,
- commandPayload: JsonType
- ) => boolean
+ this.validatePayload = this.validatePayload.bind(this)
}
public async incomingRequestHandler<ReqType extends JsonType, ResType extends JsonType>(
}
public async incomingRequestHandler<ReqType extends JsonType, ResType extends JsonType>(
@@
-131,6
+135,8
@@
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
response,
commandName
)
response,
commandName
)
+ // Emit command name event to allow delayed handling
+ this.emit(commandName, chargingStation, commandPayload, response)
}
private validatePayload (
}
private validatePayload (
@@
-138,17
+144,11
@@
export class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
commandName: OCPP20IncomingRequestCommand,
commandPayload: JsonType
): boolean {
commandName: OCPP20IncomingRequestCommand,
commandPayload: JsonType
): boolean {
- if (this.jsonSchemas.has(commandName)) {
- return this.validateIncomingRequestPayload(
- chargingStation,
- commandName,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.jsonSchemas.get(commandName)!,
- commandPayload
- )
+ if (this.payloadValidateFunctions.has(commandName)) {
+ return this.validateIncomingRequestPayload(chargingStation, commandName, commandPayload)
}
logger.warn(
}
logger.warn(
- `${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema found for command '${commandName}' PDU validation`
+ `${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema
validation function
found for command '${commandName}' PDU validation`
)
return false
}
)
return false
}