Browse Source

Simulation starts doing something!

Yentl Van Tendeloo 9 years ago
parent
commit
81d49f038a
1 changed files with 23 additions and 18 deletions
  1. 23 18
      model/model.py

+ 23 - 18
model/model.py

@@ -93,7 +93,7 @@ class ModelverseState(AtomicDEVS):
             self.state.timer = 0.0
             print("Got input: " + str(inputs[self.from_mvk]))
             for v in self.state.queue[0]:
-                self.state.output.append(getattr(self.state.mvs, translate(v[0]))(*v[1])[0])
+                self.state.output.append(getattr(self.state.mvs, translate(v[0]))(*v[1]))
                 self.state.timer += self.timings[translate(v[0])]()
         else:
             # Just append the message to process
@@ -167,16 +167,19 @@ class ModelverseKernel(AtomicDEVS):
 
         if self.from_mvs in inputs:
             # Got input from MvS, so we can continue processing
-            mvs_input = [i[0] for i in inputs[self.from_mvs]]
-            if self.state.mvk is None:
-                # No MvK, so set it with the root we have just received (or should have received)
-                self.state.root = mvs_input[0]
-                self.state.mvk = MvK(self.state.root)
-            else:
-                if len(mvs_input) == 1:
-                    self.state.reply = mvs_input[0]
+            for mvs_input in inputs[self.from_mvs]:
+                mvs_stripped = [i[0] for i in mvs_input]
+                if self.state.mvk is None:
+                    # No MvK, so set it with the root we have just received (or should have received)
+                    self.state.root = mvs_stripped[0]
+                    self.state.mvk = MvK(self.state.root)
                 else:
-                    self.state.reply = mvs_input
+                    if len(mvs_stripped) == 1:
+                        self.state.reply = mvs_stripped[0]
+                        print("Clip reply to " + str(mvs_stripped[0]))
+                    else:
+                        self.state.reply = mvs_stripped
+                        print("Set reply to " + str(mvs_stripped))
             self.state.waiting = False
 
         return self.state
@@ -195,10 +198,8 @@ class ModelverseKernel(AtomicDEVS):
             if len(self.state.users) == 0:
                 # Read out new set of users first
                 if self.state.reply is None:
-                    print("Request users!")
                     commands = [("RDK", [self.state.root])]
                 else:
-                    print("Got users!")
                     self.state.users = self.state.reply
                     commands = None
             elif self.state.phase == "init_user":
@@ -209,14 +210,19 @@ class ModelverseKernel(AtomicDEVS):
                     if self.state.current_user.startswith("__"):
                         # Don't process this user and force termination of user
                         self.state.phase = "output"
-                        print("Starts with __")
-                    else:
-                        print("User OK")
                     commands = None
             elif self.state.phase == "input":
                 # Process inputs
-                element_type, value = self.state.inputs[0]
-                commands = self.state.mvk.execute_yields(self.state.current_user, "set_input", [element_type, value], self.state.reply)
+                if self.state.inputs:
+                    element_type, value = self.state.inputs[0]
+                    print(str((element_type, value)))
+                    print(self.state.reply)
+                    commands = self.state.mvk.execute_yields(self.state.current_user, "set_input", [element_type, value], self.state.reply)
+                    if commands is None:
+                        self.state.inputs.pop(0)
+                else:
+                    commands = None
+
             elif self.state.phase == "computation":
                 commands = self.state.mvk.execute_yields(self.state.current_user, "execute_rule", [], self.state.reply)
             elif self.state.phase == "output":
@@ -231,7 +237,6 @@ class ModelverseKernel(AtomicDEVS):
                 elif self.state.phase == "init_user":
                     self.state.phase = "input"
                 elif self.state.phase == "input":
-                    self.state.inputs.pop(0)
                     self.state.phase = "computation"
                 elif self.state.phase == "computation":
                     self.state.phase = "output"