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
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.")
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()
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()
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(":::::::::")
def unregisterListener(self, listenerid): self.cleanupEvents(listenerid) del self.listenerDirectory[listenerid] debug.output("TopicManager.unregisterListener") self.printEventsAndListeners()