Skip to content
Snippets Groups Projects
Commit ae4848c1 authored by René Schöne's avatar René Schöne
Browse files

make use of new local jastadd version

parent b609430f
No related branches found
No related tags found
4 merge requests!39Version 1.1.0,!35Version 1.0.0,!17Version 0.3.2,!8Version 0.3.1
...@@ -167,7 +167,11 @@ public class MqttHandler { ...@@ -167,7 +167,11 @@ public class MqttHandler {
} else { } else {
byte[] message = body.toByteArray(); byte[] message = body.toByteArray();
for (java.util.function.Consumer<byte[]> callback : callbackList) { for (java.util.function.Consumer<byte[]> callback : callbackList) {
try {
callback.accept(message); callback.accept(message);
} catch (Exception e) {
logger.catching(e);
}
} }
} }
ack.onSuccess(null); // always acknowledge message ack.onSuccess(null); // always acknowledge message
......
...@@ -46,13 +46,15 @@ aspect RagConnect { ...@@ -46,13 +46,15 @@ aspect RagConnect {
{{#incrementalOptionActive}} {{#incrementalOptionActive}}
aspect RagConnectObserver { aspect RagConnectObserver {
class RagConnectObserver implements ASTState.Trace.Receiver { class RagConnectObserver implements ASTState.Trace.Receiver {
ASTState.Trace.Receiver oldReceiver;
class RagConnectObserverEntry { class RagConnectObserverEntry {
final ConnectToken connectToken; final ConnectToken connectToken;
final ASTNode node; final ASTNode node;
final String attributeString; final String attributeString;
final Runnable attributeCall; final Runnable attributeCall;
RagConnectObserverEntry(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) { RagConnectObserverEntry(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) {
this.connectToken = connectToken; this.connectToken = connectToken;
this.node = node; this.node = node;
...@@ -60,12 +62,30 @@ aspect RagConnectObserver { ...@@ -60,12 +62,30 @@ aspect RagConnectObserver {
this.attributeCall = attributeCall; this.attributeCall = attributeCall;
} }
} }
class RagConnectObserverStartEntry {
final ASTNode node;
final String attributeString;
final Object flushIncToken;
RagConnectObserverStartEntry(ASTNode node, String attributeString, Object flushIncToken) {
this.node = node;
this.attributeString = attributeString;
this.flushIncToken = flushIncToken;
}
}
ASTState.Trace.Receiver oldReceiver;
java.util.List<RagConnectObserverEntry> observedNodes = new java.util.ArrayList<>(); java.util.List<RagConnectObserverEntry> observedNodes = new java.util.ArrayList<>();
java.util.Set<RagConnectObserverEntry> entryQueue = new java.util.HashSet<>();
RagConnectObserverStartEntry startEntry = null;
RagConnectObserver(ASTNode node) { RagConnectObserver(ASTNode node) {
// set the receiver. potentially dangerous because overriding existing receiver! // set the receiver. potentially dangerous because overriding existing receiver!
oldReceiver = node.trace().getReceiver(); oldReceiver = node.trace().getReceiver();
node.trace().setReceiver(this); node.trace().setReceiver(this);
} }
void add(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) { void add(ConnectToken connectToken, ASTNode node, String attributeString, Runnable attributeCall) {
{{#loggingEnabledForWrites}} {{#loggingEnabledForWrites}}
System.out.println("** observer add: " + node + " on " + attributeString); System.out.println("** observer add: " + node + " on " + attributeString);
...@@ -78,10 +98,38 @@ aspect RagConnectObserver { ...@@ -78,10 +98,38 @@ aspect RagConnectObserver {
@Override @Override
public void accept(ASTState.Trace.Event event, ASTNode node, String attribute, Object params, Object value) { public void accept(ASTState.Trace.Event event, ASTNode node, String attribute, Object params, Object value) {
oldReceiver.accept(event, node, attribute, params, value); oldReceiver.accept(event, node, attribute, params, value);
// ignore all events but INC_FLUSH_ATTR // react to INC_FLUSH_START and remember entry
if (event == ASTState.Trace.Event.INC_FLUSH_START && startEntry == null) {
{{#loggingEnabledForWrites}}
System.out.println("** observer start: " + node + " on " + attribute);
{{/loggingEnabledForWrites}}
startEntry = new RagConnectObserverStartEntry(node, attribute, value);
return;
}
// react to INC_FLUSH_END and process queued entries, if it matches start entry
if (event == ASTState.Trace.Event.INC_FLUSH_END &&
node == startEntry.node &&
attribute == startEntry.attributeString &&
value == startEntry.flushIncToken) {
// create a copy of the queue to avoid entering this again causing an endless recursion
RagConnectObserverEntry[] entriesToProcess = entryQueue.toArray(new RagConnectObserverEntry[entryQueue.size()]);
entryQueue.clear();
startEntry = null;
{{#loggingEnabledForWrites}}
System.out.println("** observer process (" + entriesToProcess.length + "): " + node + " on " + attribute);
{{/loggingEnabledForWrites}}
for (RagConnectObserverEntry entry : entriesToProcess) {
entry.attributeCall.run();
}
return;
}
// ignore all other events but INC_FLUSH_ATTR
if (event != ASTState.Trace.Event.INC_FLUSH_ATTR) { if (event != ASTState.Trace.Event.INC_FLUSH_ATTR) {
return; return;
} }
{{#loggingEnabledForWrites}} {{#loggingEnabledForWrites}}
System.out.println("** observer check INC_FLUSH_ATTR event: " + node + " on " + attribute); System.out.println("** observer check INC_FLUSH_ATTR event: " + node + " on " + attribute);
{{/loggingEnabledForWrites}} {{/loggingEnabledForWrites}}
...@@ -92,7 +140,7 @@ aspect RagConnectObserver { ...@@ -92,7 +140,7 @@ aspect RagConnectObserver {
{{#loggingEnabledForWrites}} {{#loggingEnabledForWrites}}
System.out.println("** observer hit: " + entry.node + " on " + entry.attributeString); System.out.println("** observer hit: " + entry.node + " on " + entry.attributeString);
{{/loggingEnabledForWrites}} {{/loggingEnabledForWrites}}
entry.attributeCall.run(); entryQueue.add(entry);
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment