|
@@ -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"
|