|
@@ -200,6 +200,7 @@ class ModelverseKernel(AtomicDEVS):
|
|
|
was_empty = len(self.state.tasks) == 0
|
|
|
if self.state.commands is not None:
|
|
|
self.state.commands = None
|
|
|
+ self.state.mvk.returnvalue = None
|
|
|
return self.state
|
|
|
|
|
|
if self.state.mvk is None:
|
|
@@ -234,8 +235,9 @@ class ModelverseKernel(AtomicDEVS):
|
|
|
elif self.state.phase == "input":
|
|
|
# Process inputs
|
|
|
if self.state.inputs.get(self.state.current_task, None):
|
|
|
- value = self.state.inputs[self.state.current_task]
|
|
|
+ value = self.state.inputs[self.state.current_task][0]
|
|
|
commands = self.state.mvk.execute_yields(self.state.current_task, "set_input", [value], self.state.reply)
|
|
|
+ self.state.mvk.returnvalue = None
|
|
|
if commands is None:
|
|
|
self.state.inputs[self.state.current_task].pop(0)
|
|
|
else:
|
|
@@ -279,13 +281,17 @@ class ModelverseKernel(AtomicDEVS):
|
|
|
return self.state
|
|
|
|
|
|
def outputFnc(self):
|
|
|
+ outputs = {}
|
|
|
if self.state.mvk is None:
|
|
|
# Ask the root first
|
|
|
- return {self.to_mvs: [[("RR", [])]]}
|
|
|
+ outputs[self.to_mvs] = [[("RR", [])]]
|
|
|
elif self.state.waiting:
|
|
|
- return {self.to_mvs: [self.state.commands]}
|
|
|
+ outputs[self.to_mvs] = [self.state.commands]
|
|
|
|
|
|
- return {}
|
|
|
+ if self.state.mvk and self.state.mvk.returnvalue is not None:
|
|
|
+ outputs[self.to_mvi] = [self.state.mvk.returnvalue]
|
|
|
+
|
|
|
+ return outputs
|
|
|
|
|
|
def timeAdvance(self):
|
|
|
if self.state.phase == "init_task" and self.state.all_failed:
|
|
@@ -325,7 +331,7 @@ class ModelverseInterface(AtomicDEVS):
|
|
|
def extTransition(self, inputs):
|
|
|
for inp in inputs[self.from_mvk]:
|
|
|
self.state.output.append(inp)
|
|
|
- print("Got event at MvI: " + str(inputs))
|
|
|
+ print("Event history: " + str(self.state.output))
|
|
|
return self.state
|
|
|
|
|
|
def outputFnc(self):
|