|
@@ -112,6 +112,7 @@ class ModelverseState(AtomicDEVS):
|
|
|
class MvKState(object):
|
|
|
def __init__(self):
|
|
|
self.mvk = None
|
|
|
+ self.waiting = False
|
|
|
|
|
|
class ModelverseKernel(AtomicDEVS):
|
|
|
def __init__(self):
|
|
@@ -135,13 +136,21 @@ class ModelverseKernel(AtomicDEVS):
|
|
|
|
|
|
return self.state
|
|
|
|
|
|
+ def intTransition(self):
|
|
|
+ if self.state.mvk is None:
|
|
|
+ self.state.waiting = True
|
|
|
+
|
|
|
+ return self.state
|
|
|
+
|
|
|
def outputFnc(self):
|
|
|
if self.state.mvk is None:
|
|
|
# Ask the root first
|
|
|
return {self.to_mvs: [("RR", [])]}
|
|
|
|
|
|
def timeAdvance(self):
|
|
|
- if self.state.mvk is None:
|
|
|
+ if self.state.waiting:
|
|
|
+ return float("inf")
|
|
|
+ elif self.state.mvk is None:
|
|
|
return 0
|
|
|
else:
|
|
|
return float("inf")
|
|
@@ -202,8 +211,8 @@ class NetworkState(object):
|
|
|
self.timer = float("inf")
|
|
|
|
|
|
class Network(AtomicDEVS):
|
|
|
- def __init__(self, latency, bandwidth):
|
|
|
- AtomicDEVS.__init__(self, "Network")
|
|
|
+ def __init__(self, name, latency, bandwidth):
|
|
|
+ AtomicDEVS.__init__(self, name)
|
|
|
self.state = NetworkState()
|
|
|
|
|
|
self.input_port = self.addInPort("input_port")
|
|
@@ -285,18 +294,22 @@ class System(CoupledDEVS):
|
|
|
delete_edge = delete_edge
|
|
|
))
|
|
|
self.mvi2mvk = self.addSubModel(Network(\
|
|
|
+ name = "mvi2mvk",
|
|
|
latency = mvi2mvk_latency,
|
|
|
bandwidth = mvi2mvk_bandwidth
|
|
|
))
|
|
|
self.mvk2mvs = self.addSubModel(Network(\
|
|
|
+ name = "mvk2mvs",
|
|
|
latency = mvk2mvs_latency,
|
|
|
bandwidth = mvk2mvs_bandwidth
|
|
|
))
|
|
|
self.mvs2mvk = self.addSubModel(Network(\
|
|
|
+ name = "mvs2mvk",
|
|
|
latency = mvs2mvk_latency,
|
|
|
bandwidth = mvs2mvk_bandwidth
|
|
|
))
|
|
|
self.mvk2mvi = self.addSubModel(Network(\
|
|
|
+ name = "mvk2mvi",
|
|
|
latency = mvk2mvi_latency,
|
|
|
bandwidth = mvk2mvi_bandwidth
|
|
|
))
|