diff --git a/ragconnect.base/src/main/jastadd/Navigation.jrag b/ragconnect.base/src/main/jastadd/Navigation.jrag index f6fc20befc6697e63ff4c4bbac16c852c898b78d..1c2c4af4a40db2ff7ffb0bf962716d515553fd97 100644 --- a/ragconnect.base/src/main/jastadd/Navigation.jrag +++ b/ragconnect.base/src/main/jastadd/Navigation.jrag @@ -61,4 +61,11 @@ aspect Navigation { // --- isDefaultMappingDefinition --- syn boolean MappingDefinition.isDefaultMappingDefinition() = false; eq DefaultMappingDefinition.isDefaultMappingDefinition() = true; + + // --- mragconnect --- + inh MRagConnect MHandler.mragconnect(); + eq MRagConnect.getHandler().mragconnect() = this; + + // --- rootTypeComponents --- + syn JastAddList<MTypeComponent> MHandler.rootTypeComponents() = mragconnect().getRootTypeComponents(); } diff --git a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd index 6b6399287f4d657087cc45d5c905917ac54fea7a..607f96066832b1f788d0d1d6e5d0a18552f11337 100644 --- a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd +++ b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd @@ -136,6 +136,11 @@ aspect AttributesForMustache { result.addRootTypeComponent(child.asTypeComponent().toMustache()); } } + // MHandler ::= <ClassName> <Construction> <AttributeName> <FieldName> <InUse:boolean>; + result.addHandler(new MHandler("MqttServerHandler", "new MqttServerHandler(\"RagConnectMQTT\")", + result.mqttHandlerAttribute(), result.mqttHandlerField(), usesMqtt)); + result.addHandler(new MHandler("RestServerHandler", "new RestServerHandler(\"RagConnectREST\")", + result.restHandlerAttribute(), result.restHandlerField(), usesRest)); return result; } diff --git a/ragconnect.base/src/main/jastadd/intermediate/MustacheNodes.relast b/ragconnect.base/src/main/jastadd/intermediate/MustacheNodes.relast index 62ecdb6166a783e125cefef2826d550b73ab9e1b..06843177098ba889b665257c9ba2f965f5ecda88 100644 --- a/ragconnect.base/src/main/jastadd/intermediate/MustacheNodes.relast +++ b/ragconnect.base/src/main/jastadd/intermediate/MustacheNodes.relast @@ -1,4 +1,4 @@ -MRagConnect ::= ReceiveDefinition:MReceiveDefinition* SendDefinition:MSendDefinition* MappingDefinition:MMappingDefinition* DependencyDefinition:MDependencyDefinition* RootTypeComponent:MTypeComponent* TokenComponent:MTokenComponent*; +MRagConnect ::= ReceiveDefinition:MReceiveDefinition* SendDefinition:MSendDefinition* MappingDefinition:MMappingDefinition* DependencyDefinition:MDependencyDefinition* RootTypeComponent:MTypeComponent* TokenComponent:MTokenComponent* Handler:MHandler*; abstract MEndpointDefinition ::= InnerMappingDefinition:MInnerMappingDefinition*; MReceiveDefinition : MEndpointDefinition; MSendDefinition : MEndpointDefinition; @@ -7,6 +7,7 @@ MInnerMappingDefinition; MDependencyDefinition; MTypeComponent; MTokenComponent; +MHandler ::= <ClassName> <Construction> <AttributeName> <FieldName> <InUse:boolean>; rel MRagConnect.RagConnect -> RagConnect; rel MInnerMappingDefinition.MMappingDefinition -> MMappingDefinition; diff --git a/ragconnect.base/src/main/resources/MqttHandler.jadd b/ragconnect.base/src/main/resources/MqttHandler.jadd index d9f99fba5be35110b645fe976ae594853d66d213..b6750261d9f4ad06d92721c95aa7aa6e7971849b 100644 --- a/ragconnect.base/src/main/resources/MqttHandler.jadd +++ b/ragconnect.base/src/main/resources/MqttHandler.jadd @@ -1,5 +1,7 @@ import java.io.IOException; -import java.util.concurrent.TimeUnit;aspect MqttHandler { +import java.util.concurrent.TimeUnit; + +aspect MqttHandler { public class MqttServerHandler { private final java.util.Map<String, MqttHandler> handlers = new java.util.HashMap<>(); private long time; diff --git a/ragconnect.base/src/main/resources/handler.mustache b/ragconnect.base/src/main/resources/handler.mustache index e89c451007ff309a77297b9b66fe0e20dece73b8..796f76027fd22899b60e02a2fdd08fbf0dc9ebdb 100644 --- a/ragconnect.base/src/main/resources/handler.mustache +++ b/ragconnect.base/src/main/resources/handler.mustache @@ -1,7 +1,17 @@ aspect RagConnectHandler { -interface RagConnectHandler<T> { - boolean connectReceive(String path, java.util.function.Consumer<T> callback); - boolean sendPush(String path, T value); - boolean connectSendPull(String path, SupplierWithException<T> supplier); -} +{{#Handlers}} + {{#InUse}} + private {{ClassName}} {{rootNodeName}}.{{FieldName}} = {{{Construction}}}; + {{#rootTypeComponents}} + {{#first}}inh {{ClassName}} ASTNode.{{AttributeName}}();{{/first}} + eq {{rootNodeName}}.get{{name}}().{{AttributeName}}() = {{FieldName}}; + {{/rootTypeComponents}} + syn {{ClassName}} {{rootNodeName}}.{{AttributeName}}() = {{FieldName}}; + {{/InUse}} +{{/Handlers}} + public void {{rootNodeName}}.{{closeMethod}}() { + {{#Handlers}} + {{#InUse}}{{FieldName}}.close();{{/InUse}} + {{/Handlers}} + } } diff --git a/ragconnect.base/src/main/resources/mqtt.mustache b/ragconnect.base/src/main/resources/mqtt.mustache index 8de0b5a32d8696b597feaf03fd361a5b5ef00bf8..f12cb8982443f01dd6195e2c86a0ae55f1485811 100644 --- a/ragconnect.base/src/main/resources/mqtt.mustache +++ b/ragconnect.base/src/main/resources/mqtt.mustache @@ -1,14 +1,5 @@ aspect MQTT { - private String {{rootNodeName}}.MqttName() { return "RagConnectMQTT"; } - private MqttServerHandler {{rootNodeName}}.{{mqttHandlerField}} = new MqttServerHandler(MqttName()); - public void {{rootNodeName}}.{{mqttSetupWaitUntilReadyMethod}}(long time, java.util.concurrent.TimeUnit unit) { {{mqttHandlerField}}.setupWaitUntilReady(time, unit); } - - {{#RootTypeComponents}} - {{#first}}inh MqttServerHandler ASTNode.{{mqttHandlerAttribute}}();{{/first}} - eq {{rootNodeName}}.get{{name}}().{{mqttHandlerAttribute}}() = {{mqttHandlerField}}; - {{/RootTypeComponents}} - syn MqttServerHandler {{rootNodeName}}.{{mqttHandlerAttribute}}() = {{mqttHandlerField}}; } diff --git a/ragconnect.base/src/main/resources/ragconnect.mustache b/ragconnect.base/src/main/resources/ragconnect.mustache index a39510d73854301efb1f05fe7f9c1fd476916ef7..49d1721cbf0cf0131fe2248fe4e736906448bccf 100644 --- a/ragconnect.base/src/main/resources/ragconnect.mustache +++ b/ragconnect.base/src/main/resources/ragconnect.mustache @@ -1,10 +1,6 @@ {{#usesMqtt}}{{> mqtt}}{{/usesMqtt}} -{{#usesRest}}{{> rest}}{{/usesRest}} +{{> handler}} aspect ROS2RAG { - public void {{rootNodeName}}.{{closeMethod}}() { - {{#usesMqtt}}{{mqttHandlerField}}.close();{{/usesMqtt}} - {{#usesRest}}{{restHandlerField}}.close();{{/usesRest}} - } {{#ReceiveDefinitions}} {{> receiveDefinition}} {{/ReceiveDefinitions}} diff --git a/ragconnect.base/src/main/resources/rest.mustache b/ragconnect.base/src/main/resources/rest.mustache deleted file mode 100644 index 6bbde2be4d26e519635c85a6f39f9a18514bfb19..0000000000000000000000000000000000000000 --- a/ragconnect.base/src/main/resources/rest.mustache +++ /dev/null @@ -1,12 +0,0 @@ -aspect REST { - private String {{rootNodeName}}.RestName() { return "RagConnectREST"; } - private RestServerHandler {{rootNodeName}}.{{restHandlerField}} = new RestServerHandler(RestName()); - - {{#getRootTypeComponents}} - {{#first}}inh RestServerHandler ASTNode.{{restHandlerAttribute}}();{{/first}} - eq {{rootNodeName}}.get{{name}}().{{restHandlerAttribute}}() = {{restHandlerField}}; - {{/getRootTypeComponents}} - {{^getRootTypeComponents}} - syn RestServerHandler {{rootNodeName}}.{{restHandlerAttribute}}() = {{restHandlerField}}; - {{/getRootTypeComponents}} -}