From 5e0e8c88237da2659eaf01f715cd1c9b2005329e Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Mon, 4 Mar 2024 18:41:10 +0100
Subject: [PATCH] simplified exec, fixed tracing of pubs

---
 .../balloonMarking/BalloonExecution.jadd      | 14 ++-----
 .../inf/st/pnml/engine/ros/DiNeRosNode.java   | 37 ++++++++++++-------
 2 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
index 0394b45..d35f9c5 100644
--- a/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
+++ b/src/main/jastadd/engine/balloonMarking/BalloonExecution.jadd
@@ -152,24 +152,16 @@ aspect BalloonExecution{
                       }
 
                       BalloonMarkedPlace bmp=this.resolveBalloonPlace(place);
-
                       org.ros.node.topic.Publisher<std_msgs.String> pub = node.getPublisherByPlaceId(place.getId());
 
-                      if(pub != null){
-                          std_msgs.String msg = pub.newMessage();
-                          msg.setData(result.getValue());
-                          pub.publish(msg);
-                      } else {
+                      if(pub != null) {
                           result.setCreationTime(System.currentTimeMillis());
                           bmp.getBalloonMarkingList().add(result);
+                          connectedToPubPlace = true;
+                          connectedPubPlaceId = place.getId();
                       }
                   }
 
-                 // for(BalloonToken delToken : inToken){
-                 //   System.out.println("[Engine] Removing token: " + delToken.getValue());
-                //    delToken.removeSelf();
-                //  }
-
                   if(requireFlush){
                       // flush the entire marking tree
                       this.flushTreeCache();
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
index 61947d4..fea8790 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
@@ -127,38 +127,47 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
 
         switch (event.eventType) {
             case DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE:
+                System.out.println("NOTIFICATION_MARKING_CHANGE");
                 onChangeInternal(signalFilteredTransitions);
                 break;
             case DiNeRosEventTypes.NOTIFICATION_SIGNAL_CHANGE:
-
-                Boolean newVal = false;
-
-                for(SignalConnection sc : this.inputSignalConnector.getSignalConnections()){
-                    if(sc.getId().equals(event.payload)){
-                        newVal = sc.getCurrentValue();
-                    }
-                }
-
-                TracePublishing.publish(TracePublishing.TraceTypeSignalChanged,
-                        this.getDefaultNodeName()+ " " + event.payload + " " + newVal,
-                        this.connectedNode, this.tracePublisher);
+                System.out.println("NOTIFICATION_SIGNAL_CHANGE");
+                handleSignalChange(event);
                 onChangeInternal(signalFilteredTransitions);
                 break;
             case DiNeRosEventTypes.NOTIFICATION_STARTUP_ENDED:
+                System.out.println("NOTIFICATION_STARTUP_ENDED");
                 onStartupEndedInternal(signalFilteredTransitions);
                 break;
             case DiNeRosEventTypes.NOTIFICATION_SERVICE_REQ_CLIENT:
+                System.out.println("NOTIFICATION_SERVICE_REQ_CLIENT");
                 onServiceRequestAvailableOnClientSide(event.payload);
                 break;
             case DiNeRosEventTypes.NOTIFICATION_TOPIC_PUB:
+                System.out.println("NOTIFICATION_TOPIC_PUB");
                 onTopicPublisherAvailable(event.payload);
                 break;
             case DiNeRosEventTypes.NOTIFICATION_SERVICE_RES_SERVER:
+                System.out.println("NOTIFICATION_SERVICE_RES_SERVER");
                 onServiceResponseAvailableOnServerSide(event.payload);
                 break;
         }
     }
 
+    private void handleSignalChange(DiNeRosEvent event) {
+        Boolean newVal = false;
+
+        for(SignalConnection sc : this.inputSignalConnector.getSignalConnections()){
+            if(sc.getId().equals(event.payload)){
+                newVal = sc.getCurrentValue();
+            }
+        }
+
+        TracePublishing.publish(TracePublishing.TraceTypeSignalChanged,
+                this.getDefaultNodeName()+ " " + event.payload + " " + newVal,
+                this.connectedNode, this.tracePublisher);
+    }
+
     private void onTopicPublisherAvailable(java.lang.String placeId) {
 
         java.lang.String[] split = placeId.split("-INSTANCE-");
@@ -166,11 +175,11 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         java.lang.String topicName = petriNet.getPortNameByPlaceId(originalId, PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY);
         Place place = petriNet.getPlaceById(placeId);
         BalloonMarkedPlace bmp = this.marking.resolveBalloonPlace(place);
+        TracePublishing.publish(TracePublishing.TraceTypeTopicSend,
+                this.nodeName + " " + topicName + " " + placeId, this.connectedNode, this.tracePublisher);
         RosCommunicationUtil.publish(topicName, bmp.getBalloonMarking(0).getValue().getBytes(),
                 this.connectedNode, getPublisherByPlaceId(placeId));
         System.out.println("[DiNeROS-Node] [" + nodeName + "] Published msg: " + bmp.getBalloonMarking(0).getValue());
-        TracePublishing.publish(TracePublishing.TraceTypeTopicSend,
-                this.nodeName + " " + topicName + "-" + placeId, this.connectedNode, this.tracePublisher);
         bmp.getBalloonMarking(0).removeSelf();
         petriNet.flushTreeCache();
         this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE));
-- 
GitLab