import type { AbstractUIServer } from '../AbstractUIServer';
import AbstractUIService from './AbstractUIService';
+const ProcedureNameToBroadCastChannelProcedureNameMap: Omit<
+ Record<ProcedureName, BroadcastChannelProcedureName>,
+ 'startSimulator' | 'stopSimulator' | 'listChargingStations'
+> = {
+ [ProcedureName.START_CHARGING_STATION]: BroadcastChannelProcedureName.START_CHARGING_STATION,
+ [ProcedureName.STOP_CHARGING_STATION]: BroadcastChannelProcedureName.STOP_CHARGING_STATION,
+ [ProcedureName.CLOSE_CONNECTION]: BroadcastChannelProcedureName.CLOSE_CONNECTION,
+ [ProcedureName.OPEN_CONNECTION]: BroadcastChannelProcedureName.OPEN_CONNECTION,
+ [ProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR]:
+ BroadcastChannelProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR,
+ [ProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR]:
+ BroadcastChannelProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR,
+ [ProcedureName.START_TRANSACTION]: BroadcastChannelProcedureName.START_TRANSACTION,
+ [ProcedureName.STOP_TRANSACTION]: BroadcastChannelProcedureName.STOP_TRANSACTION,
+ [ProcedureName.AUTHORIZE]: BroadcastChannelProcedureName.AUTHORIZE,
+ [ProcedureName.STATUS_NOTIFICATION]: BroadcastChannelProcedureName.STATUS_NOTIFICATION,
+ [ProcedureName.HEARTBEAT]: BroadcastChannelProcedureName.HEARTBEAT,
+};
+
export default class UIService001 extends AbstractUIService {
constructor(uiServer: AbstractUIServer) {
super(uiServer, ProtocolVersion['0.0.1']);
this.requestHandlers.set(
ProcedureName.START_CHARGING_STATION,
- this.handleStartChargingStation.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.STOP_CHARGING_STATION,
- this.handleStopChargingStation.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.OPEN_CONNECTION,
- this.handleOpenConnection.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.CLOSE_CONNECTION,
- this.handleCloseConnection.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.START_TRANSACTION,
- this.handleStartTransaction.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.STOP_TRANSACTION,
- this.handleStopTransaction.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR,
- this.handleStartAutomaticTransactionGenerator.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR,
- this.handleStopAutomaticTransactionGenerator.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.AUTHORIZE,
- this.handleAuthorize.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.STATUS_NOTIFICATION,
- this.handleStatusNotification.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
this.requestHandlers.set(
ProcedureName.HEARTBEAT,
- this.handleHeartbeat.bind(this) as ProtocolRequestHandler
+ this.handleProtocolRequest.bind(this) as ProtocolRequestHandler
);
}
- private handleStartChargingStation(uuid: string, payload: RequestPayload): void {
+ private handleProtocolRequest(
+ uuid: string,
+ procedureName: ProcedureName,
+ payload: RequestPayload
+ ): void {
this.sendBroadcastChannelRequest(
uuid,
- BroadcastChannelProcedureName.START_CHARGING_STATION,
+ ProcedureNameToBroadCastChannelProcedureNameMap[
+ procedureName
+ ] as BroadcastChannelProcedureName,
payload
);
}
-
- private handleStopChargingStation(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(
- uuid,
- BroadcastChannelProcedureName.STOP_CHARGING_STATION,
- payload
- );
- }
-
- private handleOpenConnection(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(uuid, BroadcastChannelProcedureName.OPEN_CONNECTION, payload);
- }
-
- private handleCloseConnection(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(uuid, BroadcastChannelProcedureName.CLOSE_CONNECTION, payload);
- }
-
- private handleStartTransaction(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(
- uuid,
- BroadcastChannelProcedureName.START_TRANSACTION,
- payload
- );
- }
-
- private handleStopTransaction(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(uuid, BroadcastChannelProcedureName.STOP_TRANSACTION, payload);
- }
-
- private handleStartAutomaticTransactionGenerator(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(
- uuid,
- BroadcastChannelProcedureName.START_AUTOMATIC_TRANSACTION_GENERATOR,
- payload
- );
- }
-
- private handleStopAutomaticTransactionGenerator(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(
- uuid,
- BroadcastChannelProcedureName.STOP_AUTOMATIC_TRANSACTION_GENERATOR,
- payload
- );
- }
-
- private handleAuthorize(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(uuid, BroadcastChannelProcedureName.AUTHORIZE, payload);
- }
-
- private handleStatusNotification(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(
- uuid,
- BroadcastChannelProcedureName.STATUS_NOTIFICATION,
- payload
- );
- }
-
- private handleHeartbeat(uuid: string, payload: RequestPayload): void {
- this.sendBroadcastChannelRequest(uuid, BroadcastChannelProcedureName.HEARTBEAT, payload);
- }
}
export type ProtocolRequestHandler = (
uuid?: string,
+ procedureName?: ProcedureName,
payload?: RequestPayload
) => undefined | Promise<undefined> | ResponsePayload | Promise<ResponsePayload>;
export enum ProcedureName {
+ START_SIMULATOR = 'startSimulator',
+ STOP_SIMULATOR = 'stopSimulator',
LIST_CHARGING_STATIONS = 'listChargingStations',
START_CHARGING_STATION = 'startChargingStation',
STOP_CHARGING_STATION = 'stopChargingStation',
- START_SIMULATOR = 'startSimulator',
- STOP_SIMULATOR = 'stopSimulator',
OPEN_CONNECTION = 'openConnection',
CLOSE_CONNECTION = 'closeConnection',
- START_TRANSACTION = 'startTransaction',
- STOP_TRANSACTION = 'stopTransaction',
START_AUTOMATIC_TRANSACTION_GENERATOR = 'startAutomaticTransactionGenerator',
STOP_AUTOMATIC_TRANSACTION_GENERATOR = 'stopAutomaticTransactionGenerator',
+ START_TRANSACTION = 'startTransaction',
+ STOP_TRANSACTION = 'stopTransaction',
AUTHORIZE = 'authorize',
STATUS_NOTIFICATION = 'statusNotification',
HEARTBEAT = 'heartbeat',