diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java index 94a7ce46dc7c56d3c7ee0f0d02d0b412ff0febe2..447e07d9a6a1109022826f7cdc1dd263105b9367 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java @@ -23,15 +23,14 @@ public class Main { // topicTest(); - testBaseNet(); + // testBaseNet(); // testServiceNets(); - // isTest(); - - // osTest(); + isTest(); } + @SuppressWarnings("unused") private static void testBaseNet() { java.lang.String pnmlPath = "../pnml-relast-engine/src/main/resources/nets/NodeNetTest.pnml"; @@ -56,61 +55,35 @@ public class Main { } } - /* + private static void isTest() { - @SuppressWarnings("unused") - private static void osTest() throws IOException, SAXException, ParserConfigurationException { - String pnmlPath = "../pnml-relast-engine/src/main/resources/nets/os-test-1.pnml"; + java.lang.String pnmlPath = "../pnml-relast-engine/src/main/resources/nets/NodeNetSignalTest.pnml"; PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0); - BalloonMarking bm = petriNet.initializeBalloonMarking(); - PetriNetInitializer.initOutputSignalConnections(petriNet, "localhost", "mqtt"); - - // dump(bm, "before"); - - System.out.println("Output Signal Values BEFORE: "); - for(Place p : petriNet.allPlaces()){ - for(OutputSignalBinding osb : p.asOutputSignalPlace().getOutputSignalBindingList()){ - System.out.println(osb.getOutputSignalID() + " : " + osb.outputSignalValue()); - } - } + for(Transition t : petriNet.allTransitions()){ - try { - System.out.println("Sleeping for 2s"); - TimeUnit.SECONDS.sleep(2); - } catch (InterruptedException e) { - e.printStackTrace(); } - // change marking - for(Place p : petriNet.allPlaces()){ - BalloonToken bt = new BalloonToken(); - bt.setValue("New Token"); + /* nodeConfiguration.setMasterUri(URI.create("http://localhost:11311")); - BalloonMarkedPlace bmp = bm.resolveBalloonPlace(p); - bmp.addBalloonMarking(bt); - //bmp.addBalloonMarking(bt); - petriNet.flushTreeCache(); + DinerosTestNode diNeRosNode = new DinerosTestNode("TestNode", petriNet); - for ( OutputSignalBinding b : p.asOutputSignalPlace().getOutputSignalBindingList()){ - System.out.println("New Num: " + bm.resolveBalloonPlace(p).getNumBalloonMarking()); - System.out.println("New Value: " + b.outputSignalValue()); - } + for(BalloonTransition bt : diNeRosNode.callbackStorage.getTransitionList()){ + bt.getBalloonCallbacks().add(new DefaultFinalTransitionHandler("default_final_cb", 1)); } - // dump(bm, "after"); - - System.out.println("Output Signal Values AFTER: "); - for(Place p : petriNet.allPlaces()){ - for(OutputSignalBinding osb : p.asOutputSignalPlace().getOutputSignalBindingList()){ - System.out.println(osb.getOutputSignalID() + " : " + osb.outputSignalValue()); - } - } + new Thread(() -> nodeMainExecutor.execute(diNeRosNode, nodeConfiguration)) {{ + start(); + }}; - System.out.println("-- MARKING --"); - System.out.println(bm.print()); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }*/ } + /* @SuppressWarnings("unused") private static void dump(BalloonMarking balloonMarking, String filename) throws IOException { Dumper.read(balloonMarking) 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 9ff3c60b2d26fe0453892c2107e74664dcd2e675..c0e520cd4290616db0e5b549ab86096d453ccf74 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 @@ -71,11 +71,12 @@ public abstract class DiNeRosNode extends AbstractNodeMain { this.connectedNode.shutdown(); } - public synchronized void notify(java.lang.String notificationType){ + public void notify(java.lang.String notificationType){ if (notificationType.equals(NOTIFICATION_MARKING_CHANGE)) { onMarkingChangeInternal(marking.enabledBalloonTransitions()); } else if (notificationType.equals(NOTIFICATION_SIGNAL_CHANGE)) { + System.out.println("NOTIFICATION_SIGNAL_CHANGE"); onSignalChangeInternal(marking.enabledBalloonTransitions()); } else if (notificationType.equals(NOTIFICATION_WAIT_ENDED)) { onWaitEndedInternal(marking.enabledBalloonTransitions()); @@ -102,6 +103,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain { return res; } + System.out.println("FIRING TRANSITION"); marking.fireTransition(res.asFiringSelectionSuccess() .getTransition(), callbackStorage, inputSignalConnector, this,true); diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java index d00b700555c65b59cfcdd8c20c7b3b6a2fa16a69..bed0679e71c8a327ff549780ebc605bbe8a391db 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/testNodes/DinerosTestNode.java @@ -42,9 +42,11 @@ public class DinerosTestNode extends DiNeRosNode { private TransitionSelectionResult fireFirstEnabled(Set<Transition> enabledTransitions) { System.out.println("Calling fireFirstEnabled"); + System.out.println(marking.print()); FiringSelectionSuccess fsc = new FiringSelectionSuccess(); - for(Transition t : enabledTransitions){ + System.out.println("#EnabledTrans: " + marking.enabledBalloonTransitions().size()); + for(Transition t : marking.enabledBalloonTransitions()){ System.out.println("Firing transition: " + t.getId()); //System.out.println(marking.print()); fsc.setTransition(t); @@ -52,7 +54,9 @@ public class DinerosTestNode extends DiNeRosNode { } if(enabledTransitions.size() == 0){ - return new FiringSelectionFail(); + FiringSelectionWait fsw = new FiringSelectionWait(); + fsw.setWaitingTime(1000); + return fsw; } return fsc; diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java index 0f44f6f41ec480db8a18dc9ab7171d5a9f989fb3..83bfcbf86d80387ad1ad7cdf49f99500045dfa0e 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java +++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java @@ -77,7 +77,8 @@ public class PetriNetInitializer { target.setMutableTransitionInformation(tri); } - public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, InputSignalConnector inputSignalConnector, DiNeRosNode node) throws IOException { + public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, + InputSignalConnector inputSignalConnector, DiNeRosNode node) throws IOException { for(String signalId : petriNet.getInputSignalDefinition().keySet()){ @@ -91,11 +92,18 @@ public class PetriNetInitializer { // internal java connections sc.connectCurrentValue("java://localhost:00/" + signalId, false); - inputSignalConnector.ragconnectJavaRegisterConsumer("java://localhost:00/" + signalId, - bytes -> node.notify(DiNeRosNode.NOTIFICATION_SIGNAL_CHANGE)); + //inputSignalConnector.ragconnectJavaRegisterConsumer("java://localhost:00/" + signalId, + // bytes -> node.notify(DiNeRosNode.NOTIFICATION_SIGNAL_CHANGE)); + + inputSignalConnector.ragconnectJavaRegisterConsumer(signalId, bytes -> notifyOnSignalChange(node)); } } + public static void notifyOnSignalChange(DiNeRosNode node){ + System.out.println("NOTIFY ON SIGNAL CHANGE"); + node.notify(DiNeRosNode.NOTIFICATION_SIGNAL_CHANGE); + } + public void init(PetriNet petriNet, String host, String protocol, InputSignalConnector isc, DiNeRosNode node){ for(Transition t : petriNet.allTransitions()){ diff --git a/src/main/resources/nets/NodeNetSignalTest.pnml b/src/main/resources/nets/NodeNetSignalTest.pnml index ee31ce70c7df54634cd5cc4522df82be2198f3f1..3f7634f2e75b70bef1b92d3b706edbcf5f722fee 100644 --- a/src/main/resources/nets/NodeNetSignalTest.pnml +++ b/src/main/resources/nets/NodeNetSignalTest.pnml @@ -61,7 +61,7 @@ <subnet>s1</subnet> <inputsignalbinding> </inputsignalbinding> - <inputsignalclause>is1</inputsignalclause> + <inputsignalclause>(is1)</inputsignalclause> </toolspecific> <name> <text>t1</text>