瀏覽代碼

Handle the current user

Yentl Van Tendeloo 9 年之前
父節點
當前提交
6878771ef0
共有 1 個文件被更改,包括 25 次插入8 次删除
  1. 25 8
      model/model.py

+ 25 - 8
model/model.py

@@ -132,6 +132,7 @@ class MvKState(object):
         self.phase = None
         self.commands = None
         self.root = None
+        self.current_user = None
 
     def __str__(self):
         return "\nMvK: %s\n" % self.mvk + \
@@ -142,7 +143,8 @@ class MvKState(object):
                 "reply: %s\n" % self.reply + \
                 "phase: %s\n" % self.phase + \
                 "commands: %s\n" % self.commands + \
-                "root: %s\n" % self.root
+                "root: %s\n" % self.root + \
+                "current user: %s\n" % self.current_user
 
 class ModelverseKernel(AtomicDEVS):
     def __init__(self):
@@ -171,12 +173,16 @@ class ModelverseKernel(AtomicDEVS):
                 self.state.root = mvs_input[0]
                 self.state.mvk = MvK(self.state.root)
             else:
-                self.state.reply = inputs[self.from_mvs]
+                if len(mvs_input) == 1:
+                    self.state.reply = mvs_input[0]
+                else:
+                    self.state.reply = mvs_input
             self.state.waiting = False
 
         return self.state
 
     def intTransition(self):
+        was_empty = len(self.state.users) == 0
         if self.state.commands is not None:
             self.state.commands = None
             return self.state
@@ -189,22 +195,33 @@ 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:
-                    self.users = self.state.reply
-                    print("Got users: " + str(self.users))
+                    print("Got users!")
+                    self.state.users = self.state.reply
+                    commands = None
+            elif self.state.phase == "init_user":
+                if self.state.reply is None:
+                    commands = [("RV", [self.state.users[0]])]
+                else:
+                    self.state.current_user = self.state.reply
                     commands = None
             elif self.state.phase == "input":
                 # Process inputs
-                commands = self.state.mvk.execute_yields(self.state.users[0], "set_input", [self.state.inputs[0]], self.state.reply)
+                commands = self.state.mvk.execute_yields(self.state.current_user, "set_input", [self.state.inputs[0]], self.state.reply)
             elif self.state.phase == "computation":
-                commands = self.state.mvk.execute_yields(self.state.users[0], "execute_rule", [], self.state.reply)
+                commands = self.state.mvk.execute_yields(self.state.current_user, "execute_rule", [], self.state.reply)
             elif self.state.phase == "output":
-                commands = self.state.mvk.execute_yields(self.state.users[0], "get_output", [], self.state.reply)
+                commands = self.state.mvk.execute_yields(self.state.current_user, "get_output", [], self.state.reply)
+            else:
+                raise Exception("Phase: " + str(self.state.phase))
 
             # Advance phase
             if commands is None:
-                if len(self.state.users) == 0:
+                if was_empty:
+                    self.state.phase = "init_user"
+                elif self.state.phase == "init_user":
                     self.state.phase = "input"
                 elif self.state.phase == "input":
                     self.state.inputs.pop(0)