Source code for omnetpypy.front_end.sim_entity

from omnetpypy.front_end.port import Port


[docs]class SimulatedEntity: r""" A simulated entity is any active entity belonging to the simulation, such as modules and channels. Every entity may have a set of ports, and must keep a reference to the simulation context. Parameters ---------- name : str The name of the entity. Must be unique within the simulation. identifier : int The unique identifier of the entity. Must be unique within the simulation. port_names : list of str The names of the ports of the entity. Attributes ---------- name : str The name of the entity. identifier : int The unique identifier of the entity. sim_context : :class:`~omnetpypy.front_end.simulation.Simulation` The simulation where the entity is running. Used to access simulation variables like random number generators and the current simulation time. parent : :class:`~omnetpypy.front_end.sim_entity.SimulatedEntity` The parent entity of the current entity. If the entity is a top-level entity, the parent is None. is_listening : bool A flag indicating whether the entity is listening for incoming messages. ports : dict of :class:`~omnetpypy.front_end.port.Port` The ports of the entity, indexed by their names. """ def __init__(self, name, identifier, port_names): self.name = name self.identifier = identifier self.sim_context = None self.parent = None self.is_listening = False # if the entity is listening, the connector will call the handle_message method when a message is received self.ports = {port_name: Port(port_name, parent=self) for port_name in port_names}
[docs] def set_sim_context(self, sim_context): r""" Set the simulation context of the entity. Automatically called when the entity is added to the simulation. Parameters ---------- sim_context : :class:`~omnetpypy.front_end.simulation.Simulation` The simulation context where the entity is running. """ self.sim_context = sim_context
[docs] def handle_message(self, message, port_name): r""" Process a message received as input to a port. Parameters ---------- message : :class:`~omnetpypy.front_end.message.Message` The message to be processed. port_name : str or None The name of the port on which the message was received. If ``None``, the message was sent by the entity itself (self message). """ pass
[docs] def schedule_message(self, message, at=None, delay=None): r""" Schedule a self message to be received by this entity. Calls internally the method :meth:`~omnetpypy.front_end.simulation.Simulation.schedule_self_message`. Parameters ---------- message : :class:`~omnetpypy.front_end.message.Message` The message to be processed. at : float or None, optional The simulation time at which the message should be processed. If ``None``, the ``delay`` parameter will be used. delay : float or None, optional The time delay from the current simulation time at which the message should be processed. If ``None``, the ``at`` parameter will be used. """ # this sends a self message to the module at the specified time self.sim_context.connector.schedule_self_message(entity=self, message=message, at=at, delay=delay)
[docs] def is_scheduled(self, message): r""" Check if a message is scheduled as a self message for this entity. Calls internally the method :meth:`~omnetpypy.front_end.simulation.Simulation.is_scheduled`. Parameters ---------- message : :class:`~omnetpypy.front_end.message.Message` The message to be checked. """ return self.sim_context.connector.is_scheduled(message, self)
[docs] def send(self, message, port_name): r""" Send a message out on a specified port. Calls internally the method :meth:`~omnetpypy.front_end.port.Port.tx_output`. Parameters ---------- message : :class:`~omnetpypy.front_end.message.Message` The message to be sent. port_name : str The name of the port on which the message should be sent. """ self.ports[port_name].tx_output(message)
[docs] def cancel_scheduled(self, message): r""" Cancel a scheduled self message for this entity. Calls internally the method :meth:`~omnetpypy.front_end.simulation.Simulation.cancel_scheduled`. Parameters ---------- message : :class:`~omnetpypy.front_end.message.Message` The message to be cancelled. """ self.sim_context.connector.cancel_scheduled(message, self)
[docs] def initialize(self, step=0): r""" Initialize the entity right before the beginning of the simulation. This method is automatically called by the simulation context. The method is called 5 times, once for each step from 0 to 4. The step number is passed as a parameter. Parameters ---------- step : int, optional The initialization step number. Default is 0. This parameter is used to allow entities to perform different initialization actions at different steps, and synchronize with other entities. The steps are numbered from 0 to 4, and the entity has the guarantee that the previous steps have already been executed on all entities of the simulation. """ pass