def DispatchDelayedMessages(self): #get current time CurrentTime = datetime.datetime.now().time() #now peek at the queue to see if any telegrams need dispatching. #remove all telegrams from the front of the queue that have gone #past their sell by date while (PriorityQ.isEmpty() is False) & (PriorityQ.last().DispatchTime < CurrentTime) & (PriorityQ.last().DispatchTime > 0): #read the telegram from the front of the queue telegram = PriorityQ.last() #find the recipient pReceiver = EntityManager.getInstance().GetEntityFromID( telegram.Receiver) print("\nQueued telegram ready for dispatch: Sent to " + EntityNames.GetNameOfEntity(pReceiver.ID()) + ". Msg is " + MessageTypes.MsgToStr(telegram.Msg)) #send the telegram to the recipient self.Discharge(pReceiver, telegram) #remove it from the queue PriorityQ.remove(PriorityQ.last())
def DispatchMessage(self, delay, sender, receiver, msg, ExtraInfo): #get pointers to the sender and receiver pSender = EntityManager.getInstance().GetEntityFromID(sender) pReceiver = EntityManager.getInstance().GetEntityFromID(receiver) #make sure the receiver is valid if pReceiver is None: print("\nWarning! No Receiver with ID of " + receiver + " found") return #create the telegram telegram = Telegram(0, sender, receiver, msg, ExtraInfo) #if there is no delay, route telegram immediately if delay <= 0.0: print("\nInstant telegram dispatched at time: " + datetime.datetime.now().time() + " by " + EntityNames.GetNameOfEntity(pSender.ID()) + " for " + EntityNames.GetNameOfEntity(pReceiver.ID()) + ". Msg is " + MessageTypes.MsgToStr(msg)) #send the telegram to the recipient self.Discharge(pReceiver, Telegram) #else calculate the time when the telegram should be dispatched else: CurrentTime = datetime.datetime.now().time() telegram.DispatchTime = CurrentTime + delay #and put it in the queue self.PriorityQ.add(Telegram) print("\nDelayed telegram from " + EntityNames.GetNameOfEntity(pSender.ID()) + " recorded at time " + datetime.datetime.now().time() + " for " + EntityNames.GetNameOfEntity(pReceiver.ID()) + ". Msg is " + MsgToStr(msg))
from Miner import Miner from MinersWife import MinersWife from EntityNames import EntityNames from EntityManager import EntityManager import time # create a miner Bob = Miner(EntityNames.ent_Miner_Bob) # create his wife Elsa = MinersWife(EntityNames.ent_Elsa) #register them with the entity manager #EntityMgr = EntityManager() EntityManager.getInstance().RegisterEntity(Bob) EntityManager.getInstance().RegisterEntity(Elsa) for x in range(0, 20): Bob.Update() Elsa.Update() time.sleep(1)