示例#1
0
 def getEventListForListener(self, listenerid):
     eventListForListener = []
     for theEvent in self.eventList[self.listenerDirectory[listenerid]:]:
         eventListForListener.append(Event(theEvent.header, theEvent.body))
     self.cleanupEvents(listenerid)
     debug.output("TopicManager.getEventListForListener")
     self.printEventsAndListeners()
     return eventListForListener
示例#2
0
 def registerListener(self, listenerid):
     """
     For a new listener, the event list marker is initialized to the end of the
     event list in accordance with the policy that listeners receive only those
     events that are published _after_ they have registered.
     """
     if not self.listenerDirectory.has_key(listenerid):
         self.listenerDirectory[listenerid] = len(self.eventList)
         debug.output("TopicManager.registerListener")
         self.printEventsAndListeners()
     else:
         raise EventServiceException("Event listener registered earlier.")
示例#3
0
 def sendEvent(self, theEvent):
     """
     A new event is appended to the end of the event list provided there is at
     least one registered listener. This is in accordance with the policy that
     listeners receive only those events that are published _after_ they
     have registered. An event that is published before any listener has
     registered will then never be consumed and hence is not stored. This also
     prevents the event list from growing in an unbounded manner when there are
     no registered listeners.
     """
     if len(self.listenerDirectory) > 0:
         self.eventList.append(theEvent)
         l = len(self.eventList)
         if l > self.maxPendingEvents:
             self.maxPendingEvents = l
     debug.output("TopicManager.sendEvent")
     self.printEventsAndListeners()
示例#4
0
    def __init__(self, limitPendingEvents=10):
        """ eventList is the common listing of events posted to a topic. """
        self.eventList = []
        """
        listenerDirectory holds listeners alongside their event list
        markers.
        """
        self.listenerDirectory = {}
        """
        maxPendingEvents denotes the maximum number of events pending for this
        topic over the lifetime of an actual run.
        """
        self.maxPendingEvents = 0
        """
        A parameter to bound the memory for individual event queues; specifies an
        upper limit on the number of events permitted to be pending for this topic
        at any point in time. Not pressed into service yet.
        """
        self.limitPendingEvents = limitPendingEvents

        debug.output("TopicManager.__init__")
        self.printEventsAndListeners()
示例#5
0
 def printEventsAndListeners(self):
     string = ":::::::::\n" + "List of events:"
     i = 0
     for i in range(len(self.eventList)):
         string += "\n" + str(i) + "---" + str(self.eventList[i])
     string += "\n\n" + "List of listeners:"
     debug.output(string)
     sortedKeys = sorted(self.listenerDirectory.keys())
     for listenerid in sortedKeys:
         string = "event = " + str(self.listenerDirectory[listenerid])
         debug.output(string, listenerid)
     debug.output(":::::::::")
示例#6
0
 def unregisterListener(self, listenerid):
     self.cleanupEvents(listenerid)
     del self.listenerDirectory[listenerid]
     debug.output("TopicManager.unregisterListener")
     self.printEventsAndListeners()