Skip to content
Snippets Groups Projects
Commit 2ff3e5b5 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

added srv message lib

parent 41a34e83
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
File added
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment