From 2ff3e5b516b30d2ebc1b047abb74cfd1ac30990d Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Mon, 11 Jul 2022 09:47:52 +0200
Subject: [PATCH] added srv message lib

---
 build.gradle                                  |   1 +
 libs/rosjava_srv-0.1.0.jar                    | Bin 0 -> 6475 bytes
 .../inf/st/pnml/engine/ros/DiNeRosNode.java   |  48 +++++++++++++++++-
 3 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 libs/rosjava_srv-0.1.0.jar

diff --git a/build.gradle b/build.gradle
index 9bdec6d..5ef1f5c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -100,6 +100,7 @@ dependencies {
 
     // ros java messages
     compile fileTree(include: ['std_msgs-0.5.11.jar'], dir: './libs')
+    compile fileTree(include: ['rosjava_srv-0.1.0.jar'], dir: './libs')
     compile fileTree(include: ['rosgraph_msgs-1.10.12.jar'], dir: './libs')
 
     // testing
diff --git a/libs/rosjava_srv-0.1.0.jar b/libs/rosjava_srv-0.1.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..bcbab7745004a18c14f524861dd1c343be0ec1ff
GIT binary patch
literal 6475
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
VP*ygOMj-|vhDKHfhAqM%9st18aF751

literal 0
HcmV?d00001

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 d099274..68b915f 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
@@ -2,12 +2,18 @@ package de.tudresden.inf.st.pnml.engine.ros;
 
 import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
+import org.ros.concurrent.CancellableLoop;
 import org.ros.namespace.GraphName;
 import org.ros.node.AbstractNodeMain;
 import org.ros.node.ConnectedNode;
+import org.ros.node.service.ServiceResponseBuilder;
+import org.ros.node.service.ServiceServer;
 import org.ros.node.topic.Publisher;
 import org.ros.node.topic.Subscriber;
 import org.xml.sax.SAXException;
+import rosjava_srv.StringService;
+import rosjava_srv.StringServiceRequest;
+import rosjava_srv.StringServiceResponse;
 import std_msgs.String;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -25,6 +31,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
     private BalloonCallbackStorage callbackStorage;
     private final Map<java.lang.String, DiNeRosSubscriber> dinerosSubscribers = new HashMap<>();
     private final Map<InputSignalTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>();
+    private final Map<InputSignalTransition, ServiceServer<StringServiceRequest, StringServiceResponse>> dinerosServiceServers = new HashMap<>();
+    private ConnectedNode connectedNode;
 
     public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet){
         this.nodeName = nodeName;
@@ -44,6 +52,19 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         this.callbackStorage = callbackStorage;
     }
 
+    protected void nodeLoop(){
+
+        this.connectedNode.executeCancellableLoop(new CancellableLoop() {
+
+            @Override
+            protected void loop() throws InterruptedException {
+
+                System.out.println("No main loop specified for node " + nodeName + " Executing default...");
+                Thread.sleep(1000);
+            }
+        });
+    }
+
     @Override
     public GraphName getDefaultNodeName() {
         return GraphName.of(nodeName);
@@ -64,6 +85,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
     @Override
     public void onStart(final ConnectedNode connectedNode) {
 
+        this.connectedNode = connectedNode;
+
         System.out.println("Initializing node: " + nodeName);
 
         // setup publishers
@@ -89,7 +112,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
 
                 subscriber.addMessageListener(message -> {
 
-                    System.out.println("I heard: \"" + message.getData() + "\"");
+                    System.out.println("Subscriber Input: \"" + message.getData() + "\"");
 
                     for (Map.Entry<java.lang.String, DiNeRosSubscriber> entry : getDinerosSubscribers().entrySet()) {
                         if(entry.getKey().equals(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet())){
@@ -115,6 +138,25 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
                 }, t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit());
             }
         }
+
+        // setup services
+        for(Transition t : petriNet.allTransitions()){
+
+            if(t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST_IN)){
+
+                connectedNode.newServiceServer(t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName(), StringService._TYPE,
+                        (ServiceResponseBuilder<StringServiceRequest, StringServiceResponse>) (request, response) -> {
+
+                            System.out.println("Service Input: \"" + request.getInput() + "\"");
+                            response.setOutput("...");
+
+                        });
+
+            }
+
+        }
+
+        this.nodeLoop();
     }
 
     public List<Transition> getSubnetTransitionsByIds(List<java.lang.String> ids, PetriNet petriNet){
@@ -140,6 +182,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         return dinerosPublishers;
     }
 
+    public Map<InputSignalTransition, ServiceServer<StringServiceRequest, StringServiceResponse>> getDinerosServiceServers() {
+        return dinerosServiceServers;
+    }
+
     public BalloonMarking firePublisherTransition(InputSignalTransition transition){
 
         java.lang.String msgString = this.marking.fireTopicPublisherTransition(transition, this.callbackStorage, true);
-- 
GitLab