"""Author: Changbeom Choi (@cbchoi)Copyright (c) 2014-2020 Handong Global UniversityCopyright (c) 2021-2024 Hanbat National UniversityLicense: MIT. The full license text is available at:https://github.com/eventsim/pyjevsim/blob/main/LICENSEThis module contains Process Event Generator Model """frompyjevsim.behavior_modelimportBehaviorModelfrompyjevsim.definitionimport*frompyjevsim.system_messageimportSysMessage
[docs]classPEG(BehaviorModel):"""Process Event Generator (PEG) class for generating events in a simulation."""def__init__(self,name):""" Args: name (str): The name of Model """BehaviorModel.__init__(self,name)self.init_state("Wait")# Initialize initial stateself.insert_state("Wait",Infinite)# Add "Wait" stateself.insert_state("Generate",1)# Add "Generate" stateself.insert_input_port("start")# Add input port "start"self.insert_output_port("process")# Add output port "process"self.msg_no=0# Initialize message number
[docs]defext_trans(self,port,msg):""" Handles external transitions based on the input port. Args: port (str): The port that received the message msg (SysMessage): The received message """#print("input start")ifport=="start":print(f"[Gen][IN]: started")self._cur_state="Generate"# Transition state to "Generate"
[docs]defoutput(self,msg_deliver):""" Generates the output message when in the "Generate" state. Returns: MessageDeliverer: The output message """msg=SysMessage(self.get_name(),"process")msg.insert(f"{self.msg_no}")# Insert message numberprint(f"[Gen][OUT]: {self.msg_no}")returnmsg
[docs]defint_trans(self):""" Handles internal transitions based on the current state. """ifself._cur_state=="Generate":self._cur_state="Generate"# Remain in "Generate" stateself.msg_no+=1# Increment message number