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

working on topic handling

parent 34266141
No related branches found
No related tags found
No related merge requests found
package de.tudresden.inf.st.pnml.engine.ros; package de.tudresden.inf.st.pnml.engine.ros;
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition; import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition;
import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer; import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
...@@ -8,7 +9,10 @@ import org.ros.concurrent.CancellableLoop; ...@@ -8,7 +9,10 @@ import org.ros.concurrent.CancellableLoop;
import org.ros.namespace.GraphName; import org.ros.namespace.GraphName;
import org.ros.node.AbstractNodeMain; import org.ros.node.AbstractNodeMain;
import org.ros.node.ConnectedNode; import org.ros.node.ConnectedNode;
import org.ros.node.topic.Publisher;
import org.ros.node.topic.Subscriber;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import std_msgs.String;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException; import java.io.IOException;
...@@ -20,7 +24,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -20,7 +24,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
public static final java.lang.String NOTIFICATION_MARKING_CHANGE = "markingChange"; public static final java.lang.String NOTIFICATION_MARKING_CHANGE = "markingChange";
public static final java.lang.String NOTIFICATION_SIGNAL_CHANGE = "signalChange"; public static final java.lang.String NOTIFICATION_SIGNAL_CHANGE = "signalChange";
public static final java.lang.String NOTIFICATION_WAIT_ENDED = "waitEnded"; public static final java.lang.String NOTIFICATION_WAIT_ENDED = "waitEnded";
public static final java.lang.String NOTIFICATION_STARTUP_ENDED = "waitEnded"; public static final java.lang.String NOTIFICATION_STARTUP_ENDED = "startEnded";
public final java.lang.String nodeName; public final java.lang.String nodeName;
public final PetriNet petriNet; public final PetriNet petriNet;
...@@ -30,7 +34,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -30,7 +34,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
protected InputSignalConnector inputSignalConnector = new InputSignalConnector(); protected InputSignalConnector inputSignalConnector = new InputSignalConnector();
private boolean stopNode = false; private boolean stopNode = false;
public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) { final Map<DinerosPlace, Subscriber> dinerosSubscribers = new HashMap<>();
final Map<DinerosPlace, Publisher<String>> dinerosPublishers = new HashMap<>();
public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, java.lang.String rcHost, java.lang.String gcProtocol) {
this.nodeName = nodeName; this.nodeName = nodeName;
this.petriNet = petriNet; this.petriNet = petriNet;
...@@ -52,7 +59,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -52,7 +59,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
this.inputSignalConnector = inputSignalConnector; this.inputSignalConnector = inputSignalConnector;
} }
private final void internalNodeLoop() { private void internalNodeLoop() {
this.connectedNode.executeCancellableLoop(new CancellableLoop() { this.connectedNode.executeCancellableLoop(new CancellableLoop() {
...@@ -76,14 +83,19 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -76,14 +83,19 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
Set<Transition> signalFilteredTransitions = getSignalFilteredTransitions(); Set<Transition> signalFilteredTransitions = getSignalFilteredTransitions();
if (notificationType.equals(NOTIFICATION_MARKING_CHANGE)) { switch (notificationType) {
case NOTIFICATION_MARKING_CHANGE:
onMarkingChangeInternal(signalFilteredTransitions); onMarkingChangeInternal(signalFilteredTransitions);
} else if (notificationType.equals(NOTIFICATION_SIGNAL_CHANGE)) { break;
case NOTIFICATION_SIGNAL_CHANGE:
onSignalChangeInternal(signalFilteredTransitions); onSignalChangeInternal(signalFilteredTransitions);
} else if (notificationType.equals(NOTIFICATION_WAIT_ENDED)) { break;
case NOTIFICATION_WAIT_ENDED:
onWaitEndedInternal(signalFilteredTransitions); onWaitEndedInternal(signalFilteredTransitions);
} else if (notificationType.equals(NOTIFICATION_STARTUP_ENDED)) { break;
case NOTIFICATION_STARTUP_ENDED:
onStartupEndedInternal(signalFilteredTransitions); onStartupEndedInternal(signalFilteredTransitions);
break;
} }
} }
...@@ -97,7 +109,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -97,7 +109,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
for (Transition transition : marking.enabledBalloonTransitions()) { for (Transition transition : marking.enabledBalloonTransitions()) {
if (transition.asDinerosTransition().getStaticTransitionInformation() if (transition.asDinerosTransition().getStaticTransitionInformation()
.asSignalTransitionInformation().getClause() != null) { .asSignalTransitionInformation().getClause() != null) {
for (String signalId : transition.asDinerosTransition().getStaticTransitionInformation() for (java.lang.String signalId : transition.asDinerosTransition().getStaticTransitionInformation()
.asSignalTransitionInformation().getClause().signals()) { .asSignalTransitionInformation().getClause().signals()) {
for (SignalConnection sc : inputSignalConnector.getSignalConnections()) { for (SignalConnection sc : inputSignalConnector.getSignalConnections()) {
if (signalId.equals(sc.getId())) { if (signalId.equals(sc.getId())) {
...@@ -203,18 +215,45 @@ public abstract class DiNeRosNode extends AbstractNodeMain { ...@@ -203,18 +215,45 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
// TODO // TODO
// init publishers // init publishers
// TODO HashMap<java.lang.String, ArrayList<java.lang.String>> channelPubElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY);
for (java.lang.String key : channelPubElementMap.keySet()) {
// TODO: modify fire method -> if a target is publisher-place, than it has to fire; thus, add node-param to it for all needed data
for (java.lang.String placeId : channelPubElementMap.get(key)) {
final Publisher<String> publisher = connectedNode.newPublisher(key, String._TYPE);
dinerosPublishers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), publisher);
}
}
// init subscribers // init subscribers
HashMap<java.lang.String, ArrayList<java.lang.String>> channelSubElementMap
= petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY);
for (java.lang.String key : channelSubElementMap.keySet()) {
for (java.lang.String placeId : channelSubElementMap.get(key)) {
Subscriber<String> subscriber = connectedNode.newSubscriber(key, String._TYPE);
subscriber.addMessageListener(message -> {
// TODO // TODO
}, petriNet.getChannelElementLimitById(placeId));
dinerosSubscribers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), subscriber);
}
}
System.out.println("[INIT NODE] Executing first marking query."); System.out.println("[INIT NODE] Executing first marking query.");
TransitionSelectionResult firstFiringResult = onStartupEnded(marking.enabledBalloonTransitions()); // TransitionSelectionResult firstFiringResult =
this.notify(NOTIFICATION_STARTUP_ENDED);
if(firstFiringResult.isFiringSelectionSuccess()){ /* if(firstFiringResult.isFiringSelectionSuccess()){
marking.fireTransition(firstFiringResult.asFiringSelectionSuccess() marking.fireTransition(firstFiringResult.asFiringSelectionSuccess()
.getTransition(), callbackStorage, inputSignalConnector, this,true); .getTransition(), callbackStorage, inputSignalConnector, this,true);
} }*/
this.internalNodeLoop(); this.internalNodeLoop();
} }
......
package de.tudresden.inf.st.pnml.engine.transform; package de.tudresden.inf.st.pnml.engine.transform;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestNode;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.io.IOException; import java.io.IOException;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment