moving doId2do to DoCollectionManager

This commit is contained in:
Dave Schuyler 2005-05-23 22:49:47 +00:00
parent eb5cb11e3b
commit cbd8bf2164
2 changed files with 7 additions and 60 deletions

View File

@ -5,7 +5,7 @@ from MsgTypes import *
from direct.task import Task from direct.task import Task
from direct.directnotify import DirectNotifyGlobal from direct.directnotify import DirectNotifyGlobal
import CRCache import CRCache
import ConnectionRepository from direct.distributed.ConnectionRepository import ConnectionRepository
from direct.showbase import PythonUtil from direct.showbase import PythonUtil
import ParentMgr import ParentMgr
import RelatedObjectMgr import RelatedObjectMgr
@ -14,7 +14,7 @@ from ClockDelta import *
from PyDatagram import PyDatagram from PyDatagram import PyDatagram
from PyDatagramIterator import PyDatagramIterator from PyDatagramIterator import PyDatagramIterator
class ClientRepository(ConnectionRepository.ConnectionRepository): class ClientRepository(ConnectionRepository):
""" """
This maintains a client-side connection with a Panda server. This maintains a client-side connection with a Panda server.
It currently supports several different versions of the server: It currently supports several different versions of the server:
@ -25,7 +25,7 @@ class ClientRepository(ConnectionRepository.ConnectionRepository):
notify = DirectNotifyGlobal.directNotify.newCategory("ClientRepository") notify = DirectNotifyGlobal.directNotify.newCategory("ClientRepository")
def __init__(self): def __init__(self):
ConnectionRepository.ConnectionRepository.__init__(self, base.config) ConnectionRepository.__init__(self, base.config)
self.context=100000 self.context=100000
self.setClientDatagram(1) self.setClientDatagram(1)
@ -36,11 +36,6 @@ class ClientRepository(ConnectionRepository.ConnectionRepository):
# with set locationa and set interest # with set locationa and set interest
self.old_setzone_interest_handle = None self.old_setzone_interest_handle = None
# Dict of {DistributedObject ids : DistributedObjects}
self.doId2do = {}
if wantOtpServer:
# Dict of {parent DistributedObject id : {zoneIds : [child DistributedObject ids]}}
self.__doHierarchy = {}
self.readDCFile() self.readDCFile()
self.cache=CRCache.CRCache() self.cache=CRCache.CRCache()
self.serverDelta = 0 self.serverDelta = 0
@ -917,31 +912,12 @@ class ClientRepository(ConnectionRepository.ConnectionRepository):
def replaceMethod(self, oldMethod, newFunction): def replaceMethod(self, oldMethod, newFunction):
return 0 return 0
def getAllOfType(self, type):
# Returns a list of all DistributedObjects in the repository
# of a particular type.
result = []
for obj in self.doId2do.values():
if isinstance(obj, type):
result.append(obj)
return result
def findAnyOfType(self, type):
# Searches the repository for any object of the given type.
for obj in self.doId2do.values():
if isinstance(obj, type):
return obj
return None
def isLocalId(self,id): def isLocalId(self,id):
return ((id >= self.DOIDbase) and (id < self.DOIDlast)) return ((id >= self.DOIDbase) and (id < self.DOIDlast))
def haveCreateAuthority(self): def haveCreateAuthority(self):
return (self.DOIDlast > self.DOIDnext) return (self.DOIDlast > self.DOIDnext)
def getDoHierarchy(self):
return self.__doHierarchy
def getWorld(self, doId): def getWorld(self, doId):
# Get the world node for this object # Get the world node for this object
obj = self.doId2do[doId] obj = self.doId2do[doId]

View File

@ -2,13 +2,15 @@ from pandac.PandaModules import *
from direct.task import Task from direct.task import Task
from direct.directnotify import DirectNotifyGlobal from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DoInterestManager import DoInterestManager from direct.distributed.DoInterestManager import DoInterestManager
from direct.distributed.DoCollectionManager import DoCollectionManager
from PyDatagram import PyDatagram from PyDatagram import PyDatagram
from PyDatagramIterator import PyDatagramIterator from PyDatagramIterator import PyDatagramIterator
import types import types
import imp import imp
class ConnectionRepository(DoInterestManager, CConnectionRepository): class ConnectionRepository(
DoInterestManager, DoCollectionManager, CConnectionRepository):
""" """
This is a base class for things that know how to establish a This is a base class for things that know how to establish a
connection (and exchange datagrams) with a gameserver. This connection (and exchange datagrams) with a gameserver. This
@ -20,6 +22,7 @@ class ConnectionRepository(DoInterestManager, CConnectionRepository):
def __init__(self, config): def __init__(self, config):
assert self.notify.debugCall() assert self.notify.debugCall()
DoInterestManager.__init__(self) DoInterestManager.__init__(self)
DoCollectionManager.__init__(self)
CConnectionRepository.__init__(self) CConnectionRepository.__init__(self)
self.setPythonRepository(self) self.setPythonRepository(self)
@ -56,20 +59,6 @@ class ConnectionRepository(DoInterestManager, CConnectionRepository):
# DC file. The AIRepository will redefine this to 'AI'. # DC file. The AIRepository will redefine this to 'AI'.
self.dcSuffix = '' self.dcSuffix = ''
if __debug__:
def printObjects(self):
format="%10s %10s %10s %30s %20s"
title=format%("parentId", "zoneId", "doId", "dclass", "name")
print title
print '-'*len(title)
for distObj in self.doId2do.values():
print format%(
distObj.__dict__.get("parentId"),
distObj.__dict__.get("zoneId"),
distObj.__dict__.get("doId"),
distObj.dclass.getName(),
distObj.__dict__.get("name"))
def readDCFile(self, dcFileNames = None): def readDCFile(self, dcFileNames = None):
""" """
Reads in the dc files listed in dcFileNames, or if Reads in the dc files listed in dcFileNames, or if
@ -413,21 +402,3 @@ class ConnectionRepository(DoInterestManager, CConnectionRepository):
if self.networkPlugPulled(): if self.networkPlugPulled():
self.notify.info('*** RESTORING SIMULATED PULLED-NETWORK-PLUG ***') self.notify.info('*** RESTORING SIMULATED PULLED-NETWORK-PLUG ***')
self.setSimulatedDisconnect(0) self.setSimulatedDisconnect(0)
def doFind(self, str):
"""
Returns list of distributed objects with matching str in value.
"""
for value in self.doId2do.values():
if `value`.find(str) >= 0:
return value
def doFindAll(self, str):
"""
Returns list of distributed objects with matching str in value.
"""
matches = []
for value in self.doId2do.values():
if `value`.find(str) >= 0:
matches.append(value)
return matches