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 _removeCurrentShardInterest(self, callback):
        parentId2handles = {}
        for handle, state in self._interests.items():
            parentId2handles.setdefault(state.parentId, set())
            parentId2handles[state.parentId].add(handle)

        doId2parentId = {}
        for doId in parentId2handles.keys():
            obj = self.getDo(doId)
            if obj is not None:
                doId2parentId[doId] = obj.parentId

        parentId2childIds = {}
        for doId, parentId in doId2parentId.items():
            parentId2childIds.setdefault(parentId, set())
            parentId2childIds[parentId].add(doId)

        print 'parentId2handles: %s' % parentId2handles
        print 'parentId2childIds: %s' % parentId2childIds
        self.closeShardEGroup = EventGroup('closeShardInterest')
        self.acceptOnce(self.closeShardEGroup.getDoneEvent(), callback)
        for districtId in self.activeDistrictMap.keys():
            self._remInterests(districtId, parentId2childIds, parentId2handles)

        return
Exemplo n.º 3
0
    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
        elif event is not None:
            messenger.send(event)

        self.visAvatar = None
        self.visZone = None
        if clearAll:
            if event is not None:
                parentEvent = eventGroup.newEvent('%s.parent.removeInterest' %
                                                  self.doId)
            else:
                parentEvent = None
            if hasattr(self.cr.doId2do[self.parentId], 'worldGrid'):
                self.cr.doId2do[self.parentId].worldGrid.stopProcessVisibility(
                    event=parentEvent)
Exemplo n.º 4
0
    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)