More work on the (better) AID

This commit is contained in:
Daniel Kluge
2023-12-04 17:10:03 +01:00
parent 389a28d7e7
commit 64279a6efa
6 changed files with 120 additions and 94 deletions
+23 -41
View File
@@ -4,7 +4,8 @@ import type { Request } from "./types/requests";
import type AbstractConnectionObject from "./abstractConnectionObject";
import AIMCMapper from "./AIMCMapper";
import AIDParser from "./parser/AIDParser";
import { EndpointMetadata } from "types/aidConf";
import type { EndpointMetadata, InterfaceActionForm, InterfaceEventForm, InterfacePropertyForm } from "./types/aidConf";
import type { ConnectionConfiguration } from "./types/aimcConf";
type AASRegistration = {
aas: types.Environment,
@@ -165,63 +166,44 @@ export default class MultiMessageBroker {
*/
private onInterfaceRequest(request: Request, registration: AASRegistrationPrepared): any {
const getConnector = (target: types.Class) => {
const getMapping = (target: types.Class) => {
const mapping = registration.mappingConfiguration?.get(target);
if (mapping === undefined) throw new ReferenceError(`No mapping found for ${(request.target as any).idShort}`);
return mapping;
}
const getConnector = (mapping: ConnectionConfiguration) => {
const connector = registration.connectorInterfaces?.find(connector => connector.endpointMetadata.base === mapping.base);
if (connector === undefined) throw new ReferenceError(`No connector found for ${(request.target as any).idShort}`);
return connector;
}
switch (request.type) {
case "READ": {
const connector = getConnector(request.target);
return connector.readProperty(request.target);
}
case "WRITE": {
const connector = getConnector(request.target);
return connector.writeProperty(request.target, request.extraData.value);
}
case "OBSERVE": {
const connector = getConnector(request.target);
return connector.observeProperty(request.target, request.extraData.callback);
}
case "SUBSCRIBE": {
const connector = getConnector(request.target);
return connector.subscribeEvent(request.target, request.extraData.callback);
}
case "UNSUBSCRIBE": {
const connector = getConnector(request.target);
return connector.unsubscribeEvent(request.target);
}
case "CALL": {
const connector = getConnector(request.target);
return connector.callActionSync(request.target, request.extraData.args);
}
case "CALL-ASYNC": {
const connector = getConnector(request.target);
return connector.callActionAsync(request.target, request.extraData.args);
}
case "GET-OP-STATE": {
if (request.type === "xAsyncActionState" || request.type === "xAsyncActionResult") {
if (request.type === "xAsyncActionState") {
const state = registration.connectorInterfaces.map(connector => connector.readAsyncActionState(request.target)).filter(state => state !== undefined)[0];
if (state === undefined) throw new ReferenceError(`No connector found for operation handle ${request.target}`);
return state;
}
case "GET-OP-RESULT": {
} else {
const result = registration.connectorInterfaces.map(connector => connector.readAsyncActionResponse(request.target)).filter(result => result !== undefined)[0];
if (result === undefined) throw new ReferenceError(`No connector found for operation handle ${request.target}`);
return result;
}
}
else {
const mapping = getMapping(request.target);
const connector = getConnector(mapping);
switch (request.type) {
case "readProperty": return connector.readProperty(mapping);
case "writeProperty": return connector.writeProperty(mapping, request.extraData.value);
case "observeProperty": return connector.observeProperty(mapping, request.extraData.callback);
case "unobserveProperty": return connector.unobserveProperty(mapping);
case "subscribeEvent": return connector.subscribeEvent(mapping, request.extraData.callback);
case "unsubscribeEvent": return connector.unsubscribeEvent(mapping);
case "invokeAction": return request.extraData.async ? connector.callActionAsync(mapping, request.extraData.args) : connector.callActionSync(mapping, request.extraData.args);
}
}
}
/**