Пример #1
0
    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())
Пример #2
0
    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))
Пример #3
0
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)