瀏覽代碼

Merge branch 'yentl' of msdl.uantwerpen.be:yentl/modelverse into yentl

Yentl Van Tendeloo 9 年之前
父節點
當前提交
2c02551314
共有 2 個文件被更改,包括 13 次插入7 次删除
  1. 1 1
      kernel/modelverse_kernel/main.py
  2. 12 6
      model/model.py

+ 1 - 1
kernel/modelverse_kernel/main.py

@@ -64,7 +64,7 @@ class ModelverseKernel(object):
             elif inst_v is None:
                 raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, phase_v))
             else:
-                #print("%-30s(%s)" % (inst_v["value"], phase_v))
+                #print("%-30s(%s) -- %s" % (inst_v["value"], phase_v, username))
                 gen = getattr(self, "%s_%s" % (inst_v["value"], phase_v))(user_root)
         elif inst_v is None:
             raise Exception("%s: error understanding command (%s, %s)" % (self.debug_info, inst_v, phase_v))

+ 12 - 6
model/model.py

@@ -132,6 +132,7 @@ class MvKState(object):
         self.commands = None
         self.root = None
         self.current_user = None
+        self.loaded_primitives = False
 
     def __str__(self):
         return "\nMvK: %s\n" % self.mvk + \
@@ -175,10 +176,7 @@ class ModelverseKernel(AtomicDEVS):
                     self.state.root = mvs_stripped[0]
                     self.state.mvk = MvK(self.state.root)
                 else:
-                    if len(mvs_stripped) == 1:
-                        self.state.reply = mvs_stripped[0]
-                    else:
-                        self.state.reply = mvs_stripped
+                    self.state.reply = mvs_stripped
             self.state.waiting = False
 
         return self.state
@@ -192,6 +190,14 @@ class ModelverseKernel(AtomicDEVS):
         if self.state.mvk is None:
             # Initializing
             self.state.waiting = True
+        elif not self.state.loaded_primitives:
+            commands = self.state.mvk.execute_yields("", "load_primitives", [], self.state.reply)
+            if commands is None:
+                self.state.loaded_primitives = True
+                self.state.reply = None
+            else:
+                self.state.waiting = True
+            self.state.commands = commands
         else:
             # Are initialized and have work to do
             if len(self.state.users) == 0:
@@ -259,7 +265,7 @@ class ModelverseKernel(AtomicDEVS):
         return {}
 
     def timeAdvance(self):
-        if self.state.commands:
+        if self.state.commands is not None:
             return 0
         elif self.state.waiting:
             return float("inf")
@@ -489,6 +495,6 @@ args = {
 
 model = System(**args)
 sim = Simulator(model)
-sim.setTerminationTime(10000)
+sim.setTerminationTime(90000)
 #sim.setVerbose()
 sim.simulate()