collector.py 1.0 KB

123456789101112131415161718192021222324252627282930
  1. from pypdevs.DEVS import AtomicDEVS
  2. # Define the state of the collector as a structured object
  3. class CollectorState(object):
  4. def __init__(self):
  5. # Contains received events and simulation time
  6. self.events = []
  7. self.current_time = 0.0
  8. class Collector(AtomicDEVS):
  9. def __init__(self):
  10. AtomicDEVS.__init__(self, "Collector")
  11. self.state = CollectorState()
  12. # Has only one input port
  13. self.in_event = self.addInPort("in_event")
  14. def extTransition(self, inputs):
  15. # Update simulation time
  16. self.state.current_time += self.elapsed
  17. # Calculate time in queue
  18. evt = inputs[self.in_event]
  19. time = self.state.current_time - evt.creation_time - evt.processing_time
  20. inputs[self.in_event].queueing_time = max(0.0, time)
  21. # Add incoming event to received events
  22. self.state.events.append(inputs[self.in_event])
  23. return self.state
  24. # Don't define anything else, as we only store events.
  25. # Collector has no behaviour of its own.