def stopProcessVisibility(self, clearAll=False, event=None): self.ignore(self.cr.StopVisibilityEvent) taskMgr.remove(self.taskName("processVisibility")) if event is not None: eventGroup = EventGroup('DistCartesianGrid.stopProcessVis', doneEvent=event) if self.gridVisContext is not None: if event is not None: removeEvent = eventGroup.newEvent('%s.removeInterest' % self.doId) else: removeEvent = None self.cr.removeInterest(self.gridVisContext, removeEvent) self.gridVisContext = None else: # if we were given an event but we have not interest open, # just send the event right away if event is not None: messenger.send(event) self.visAvatar = None self.visZone = None # sometimes we also need to remove vis avatar from # my parent if it is also a grid if (clearAll): if event is not None: parentEvent = eventGroup.newEvent('%s.parent.removeInterest' % self.doId) else: parentEvent = None ##HACK BANDAID FOR PVP INSTANCES if (hasattr(self.cr.doId2do[self.parentId], "worldGrid")): self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility( event=parentEvent)
def stopProcessVisibility(self, clearAll=False, event=None): self.ignore(self.cr.StopVisibilityEvent) taskMgr.remove(self.taskName("processVisibility")) if event is not None: eventGroup = EventGroup('DistCartesianGrid.stopProcessVis', doneEvent=event) if self.gridVisContext is not None: if event is not None: removeEvent = eventGroup.newEvent('%s.removeInterest' % self.doId) else: removeEvent = None self.cr.removeInterest(self.gridVisContext, removeEvent) self.gridVisContext = None else: # if we were given an event but we have not interest open, # just send the event right away if event is not None: messenger.send(event) self.visAvatar = None self.visZone = None # sometimes we also need to remove vis avatar from # my parent if it is also a grid if (clearAll): if event is not None: parentEvent = eventGroup.newEvent('%s.parent.removeInterest' % self.doId) else: parentEvent = None ##HACK BANDAID FOR PVP INSTANCES if(hasattr(self.cr.doId2do[self.parentId],"worldGrid")): self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility(event=parentEvent)
def __init__(self, interestMgr, name, doneEvent=None, recurse=True, start=True, mustCollect=False, doCollectionMgr=None): DirectObject.__init__(self) self._interestMgr = interestMgr if doCollectionMgr is None: doCollectionMgr = interestMgr self._doCollectionMgr = doCollectionMgr self._eGroup = EventGroup(name, doneEvent=doneEvent) self._doneEvent = self._eGroup.getDoneEvent() self._gotEvent = False self._recurse = recurse if self._recurse: # this will hold a dict of parentId to set(zoneIds) that are closing self.closingParent2zones = {} if start: self.startCollect(mustCollect)
class InterestWatcher(DirectObject): """Object that observes all interests adds/removes over a period of time, and sends out an event when all of those interests have closed""" notify = directNotify.newCategory('InterestWatcher') def __init__(self, interestMgr, name, doneEvent=None, recurse=True, start=True, mustCollect=False, doCollectionMgr=None): DirectObject.__init__(self) self._interestMgr = interestMgr if doCollectionMgr is None: doCollectionMgr = interestMgr self._doCollectionMgr = doCollectionMgr self._eGroup = EventGroup(name, doneEvent=doneEvent) self._doneEvent = self._eGroup.getDoneEvent() self._gotEvent = False self._recurse = recurse if self._recurse: # this will hold a dict of parentId to set(zoneIds) that are closing self.closingParent2zones = {} if start: self.startCollect(mustCollect) def startCollect(self, mustCollect=False): self._mustCollect = mustCollect self.accept(self._interestMgr._getAddInterestEvent(), self._handleInterestOpenEvent) self.accept(self._interestMgr._getRemoveInterestEvent(), self._handleInterestCloseEvent) def stopCollect(self): self.ignore(self._interestMgr._getAddInterestEvent()) self.ignore(self._interestMgr._getRemoveInterestEvent()) mustCollect = self._mustCollect del self._mustCollect if not self._gotEvent: if mustCollect: logFunc = self.notify.error else: logFunc = self.notify.warning logFunc('%s: empty interest-complete set' % self.getName()) self.destroy() else: self.accept(self.getDoneEvent(), self.destroy) def destroy(self): if hasattr(self, '_eGroup'): self._eGroup.destroy() del self._eGroup del self._gotEvent del self._interestMgr self.ignoreAll() def getName(self): return self._eGroup.getName() def getDoneEvent(self): return self._doneEvent def _handleInterestOpenEvent(self, event): self._gotEvent = True self._eGroup.addEvent(event) def _handleInterestCloseEvent(self, event, parentId, zoneIdList): self._gotEvent = True self._eGroup.addEvent(event) """