removed support for pre-OTP server
This commit is contained in:
parent
e90bc3f1c6
commit
5c5faf6bbd
|
|
@ -34,7 +34,7 @@ PStatCollector DCClass::_generate_pcollector("App:Show code:readerPollTask:Gener
|
|||
#endif // CPPPARSER
|
||||
|
||||
ConfigVariableBool dc_multiple_inheritance
|
||||
("dc-multiple-inheritance", false,
|
||||
("dc-multiple-inheritance", true,
|
||||
PRC_DESC("Set this true to support multiple inheritance in the dc file. "
|
||||
"If this is false, the old way, multiple inheritance is not "
|
||||
"supported, but field numbers will be numbered sequentially, "
|
||||
|
|
@ -977,7 +977,7 @@ ai_format_generate(PyObject *distobj, int do_id,
|
|||
// Parent is a bit overloaded; this parent is not about inheritance,
|
||||
// this one is about the visibility container parent, i.e. the zone
|
||||
// parent:
|
||||
if (parent_id) { // if wantOtpServer:
|
||||
if (parent_id) {
|
||||
packer.raw_pack_uint32(parent_id);
|
||||
}
|
||||
packer.raw_pack_uint32(zone_id);
|
||||
|
|
|
|||
|
|
@ -32,10 +32,9 @@ class ClientRepository(ConnectionRepository):
|
|||
self.setClientDatagram(1)
|
||||
|
||||
self.recorder = base.recorder
|
||||
if wantOtpServer:
|
||||
# this is used to imulate the old setzone behavior
|
||||
# with set locationa and set interest
|
||||
self.old_setzone_interest_handle = None
|
||||
# this is used to emulate the old setzone behavior
|
||||
# with set locationa and set interest
|
||||
self.old_setzone_interest_handle = None
|
||||
|
||||
self.readDCFile()
|
||||
self.cache=CRCache.CRCache()
|
||||
|
|
@ -192,10 +191,9 @@ class ClientRepository(ConnectionRepository):
|
|||
return time.time() + self.serverDelta
|
||||
|
||||
def handleGenerateWithRequired(self, di):
|
||||
if wantOtpServer:
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId == self.GameGlobalsId or parentId in self.doId2do
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId == self.GameGlobalsId or parentId in self.doId2do
|
||||
# Get the class Id
|
||||
classId = di.getUint16()
|
||||
# Get the DO Id
|
||||
|
|
@ -204,17 +202,13 @@ class ClientRepository(ConnectionRepository):
|
|||
dclass = self.dclassesByNumber[classId]
|
||||
dclass.startGenerate()
|
||||
# Create a new distributed object, and put it in the dictionary
|
||||
if wantOtpServer:
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||
else:
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di)
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||
dclass.stopGenerate()
|
||||
|
||||
def handleGenerateWithRequiredOther(self, di):
|
||||
if wantOtpServer:
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId == self.GameGlobalsId or parentId in self.doId2do
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId == self.GameGlobalsId or parentId in self.doId2do
|
||||
# Get the class Id
|
||||
classId = di.getUint16()
|
||||
# Get the DO Id
|
||||
|
|
@ -223,14 +217,10 @@ class ClientRepository(ConnectionRepository):
|
|||
dclass = self.dclassesByNumber[classId]
|
||||
dclass.startGenerate()
|
||||
# Create a new distributed object, and put it in the dictionary
|
||||
if wantOtpServer:
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||
else:
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di)
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||
dclass.stopGenerate()
|
||||
|
||||
def handleGenerateWithRequiredOtherOwner(self, di):
|
||||
assert wantOtpServer
|
||||
# Get the class Id
|
||||
classId = di.getUint16()
|
||||
# Get the DO Id
|
||||
|
|
@ -247,10 +237,9 @@ class ClientRepository(ConnectionRepository):
|
|||
|
||||
def handleQuietZoneGenerateWithRequired(self, di):
|
||||
# Special handler for quiet zone generates -- we need to filter
|
||||
if wantOtpServer:
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId in self.doId2do
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId in self.doId2do
|
||||
# Get the class Id
|
||||
classId = di.getUint16()
|
||||
# Get the DO Id
|
||||
|
|
@ -258,49 +247,32 @@ class ClientRepository(ConnectionRepository):
|
|||
# Look up the dclass
|
||||
dclass = self.dclassesByNumber[classId]
|
||||
dclass.startGenerate()
|
||||
# If the class is a neverDisable class (which implies uberzone) we
|
||||
# should go ahead and generate it even though we are in the quiet zone
|
||||
if not wantOtpServer:
|
||||
if dclass.getClassDef().neverDisable:
|
||||
# Create a new distributed object, and put it in the dictionary
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di)
|
||||
else:
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
|
||||
dclass.stopGenerate()
|
||||
|
||||
def handleQuietZoneGenerateWithRequiredOther(self, di):
|
||||
# Special handler for quiet zone generates -- we need to filter
|
||||
if wantOtpServer:
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId in self.doId2do
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
assert parentId in self.doId2do
|
||||
# Get the class Id
|
||||
classId = di.getUint16()
|
||||
# Get the DO Id
|
||||
doId = di.getUint32()
|
||||
# Look up the dclass
|
||||
dclass = self.dclassesByNumber[classId]
|
||||
# If the class is a neverDisable class (which implies uberzone) we
|
||||
# should go ahead and generate it even though we are in the quiet zone
|
||||
dclass.startGenerate()
|
||||
if not wantOtpServer:
|
||||
if dclass.getClassDef().neverDisable:
|
||||
# Create a new distributed object, and put it in the dictionary
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di)
|
||||
else:
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
|
||||
dclass.stopGenerate()
|
||||
|
||||
# wantOtpServer: remove the None defaults when we remove this config variable
|
||||
def generateWithRequiredFields(self, dclass, doId, di, parentId = None, zoneId = None):
|
||||
def generateWithRequiredFields(self, dclass, doId, di, parentId, zoneId):
|
||||
if self.doId2do.has_key(doId):
|
||||
# ...it is in our dictionary.
|
||||
# Just update it.
|
||||
distObj = self.doId2do[doId]
|
||||
assert(distObj.dclass == dclass)
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredFields(dclass, di)
|
||||
# updateRequiredFields calls announceGenerate
|
||||
elif self.cache.contains(doId):
|
||||
|
|
@ -312,8 +284,7 @@ class ClientRepository(ConnectionRepository):
|
|||
self.doId2do[doId] = distObj
|
||||
# and update it.
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredFields(dclass, di)
|
||||
# updateRequiredFields calls announceGenerate
|
||||
else:
|
||||
|
|
@ -331,12 +302,10 @@ class ClientRepository(ConnectionRepository):
|
|||
# Update the required fields
|
||||
distObj.generateInit() # Only called when constructed
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredFields(dclass, di)
|
||||
# updateRequiredFields calls announceGenerate
|
||||
if wantOtpServer:
|
||||
print "New DO:%s, dclass:%s"%(doId, dclass.getName())
|
||||
print "New DO:%s, dclass:%s"%(doId, dclass.getName())
|
||||
return distObj
|
||||
|
||||
## def generateGlobalObject(self, doId, dcname):
|
||||
|
|
@ -359,11 +328,10 @@ class ClientRepository(ConnectionRepository):
|
|||
## # Update the required fields
|
||||
## distObj.generateInit() # Only called when constructed
|
||||
## distObj.generate()
|
||||
## if wantOtpServer:
|
||||
## # TODO: ROGER: where should we get parentId and zoneId?
|
||||
## parentId = None
|
||||
## zoneId = None
|
||||
## distObj.setLocation(parentId, zoneId)
|
||||
## # TODO: ROGER: where should we get parentId and zoneId?
|
||||
## parentId = None
|
||||
## zoneId = None
|
||||
## distObj.setLocation(parentId, zoneId)
|
||||
## # updateRequiredFields calls announceGenerate
|
||||
## return distObj
|
||||
|
||||
|
|
@ -375,8 +343,7 @@ class ClientRepository(ConnectionRepository):
|
|||
distObj = self.doId2do[doId]
|
||||
assert(distObj.dclass == dclass)
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredOtherFields(dclass, di)
|
||||
# updateRequiredOtherFields calls announceGenerate
|
||||
elif self.cache.contains(doId):
|
||||
|
|
@ -388,8 +355,7 @@ class ClientRepository(ConnectionRepository):
|
|||
self.doId2do[doId] = distObj
|
||||
# and update it.
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredOtherFields(dclass, di)
|
||||
# updateRequiredOtherFields calls announceGenerate
|
||||
else:
|
||||
|
|
@ -407,8 +373,7 @@ class ClientRepository(ConnectionRepository):
|
|||
# Update the required fields
|
||||
distObj.generateInit() # Only called when constructed
|
||||
distObj.generate()
|
||||
if wantOtpServer:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
distObj.updateRequiredOtherFields(dclass, di)
|
||||
# updateRequiredOtherFields calls announceGenerate
|
||||
return distObj
|
||||
|
|
@ -573,45 +538,26 @@ class ClientRepository(ConnectionRepository):
|
|||
self.handleServerHeartbeat(di)
|
||||
elif msgType == CLIENT_SYSTEM_MESSAGE:
|
||||
self.handleSystemMessage(di)
|
||||
elif wantOtpServer:
|
||||
if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
||||
self.handleGenerateWithRequired(di)
|
||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
||||
self.handleGenerateWithRequiredOther(di)
|
||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER:
|
||||
self.handleGenerateWithRequiredOtherOwner(di)
|
||||
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
||||
self.handleUpdateField(di)
|
||||
elif msgType == CLIENT_OBJECT_DISABLE:
|
||||
self.handleDisable(di)
|
||||
elif msgType == CLIENT_OBJECT_DISABLE_OWNER:
|
||||
self.handleDisable(di, ownerView=True)
|
||||
elif msgType == CLIENT_OBJECT_DELETE_RESP:
|
||||
self.handleDelete(di)
|
||||
elif msgType == CLIENT_DONE_INTEREST_RESP:
|
||||
self.handleInterestDoneMessage(di)
|
||||
elif msgType == CLIENT_QUERY_ONE_FIELD_RESP:
|
||||
self.handleQueryOneFieldResp(di)
|
||||
elif msgType == CLIENT_OBJECT_LOCATION:
|
||||
self.handleObjectLocation(di)
|
||||
else:
|
||||
currentLoginState = self.loginFSM.getCurrentState()
|
||||
if currentLoginState:
|
||||
currentLoginStateName = currentLoginState.getName()
|
||||
else:
|
||||
currentLoginStateName = "None"
|
||||
currentGameState = self.gameFSM.getCurrentState()
|
||||
if currentGameState:
|
||||
currentGameStateName = currentGameState.getName()
|
||||
else:
|
||||
currentGameStateName = "None"
|
||||
ClientRepository.notify.warning(
|
||||
"Ignoring unexpected message type: " +
|
||||
str(msgType) +
|
||||
" login state: " +
|
||||
currentLoginStateName +
|
||||
" game state: " +
|
||||
currentGameStateName)
|
||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED:
|
||||
self.handleGenerateWithRequired(di)
|
||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
|
||||
self.handleGenerateWithRequiredOther(di)
|
||||
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER:
|
||||
self.handleGenerateWithRequiredOtherOwner(di)
|
||||
elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
|
||||
self.handleUpdateField(di)
|
||||
elif msgType == CLIENT_OBJECT_DISABLE:
|
||||
self.handleDisable(di)
|
||||
elif msgType == CLIENT_OBJECT_DISABLE_OWNER:
|
||||
self.handleDisable(di, ownerView=True)
|
||||
elif msgType == CLIENT_OBJECT_DELETE_RESP:
|
||||
self.handleDelete(di)
|
||||
elif msgType == CLIENT_DONE_INTEREST_RESP:
|
||||
self.handleInterestDoneMessage(di)
|
||||
elif msgType == CLIENT_QUERY_ONE_FIELD_RESP:
|
||||
self.handleQueryOneFieldResp(di)
|
||||
elif msgType == CLIENT_OBJECT_LOCATION:
|
||||
self.handleObjectLocation(di)
|
||||
else:
|
||||
currentLoginState = self.loginFSM.getCurrentState()
|
||||
if currentLoginState:
|
||||
|
|
@ -695,16 +641,6 @@ class ClientRepository(ConnectionRepository):
|
|||
# send the message
|
||||
self.send(datagram)
|
||||
|
||||
if not wantOtpServer:
|
||||
def sendSetShardMsg(self, shardId):
|
||||
datagram = PyDatagram()
|
||||
# Add message type
|
||||
datagram.addUint16(CLIENT_SET_SHARD)
|
||||
# Add shard id
|
||||
datagram.addUint32(shardId)
|
||||
# send the message
|
||||
self.send(datagram)
|
||||
|
||||
def getObjectsOfClass(self, objClass):
|
||||
""" returns dict of doId:object, containing all objects
|
||||
that inherit from 'class'. returned dict is safely mutable. """
|
||||
|
|
@ -724,72 +660,45 @@ class ClientRepository(ConnectionRepository):
|
|||
doDict[doId] = do
|
||||
return doDict
|
||||
|
||||
if wantOtpServer:
|
||||
def sendEmulateSetZoneMsg(self, zoneId, visibleZoneList=None,
|
||||
parentIdin=None, event=None):
|
||||
"""
|
||||
This Will Move The avatar and set an interest to that location ..
|
||||
"""
|
||||
parentId = parentIdin
|
||||
if parentId is None:
|
||||
parentId = base.localAvatar.defaultShard
|
||||
def sendEmulateSetZoneMsg(self, zoneId, visibleZoneList=None,
|
||||
parentIdin=None, event=None):
|
||||
"""
|
||||
This Will Move The avatar and set an interest to that location ..
|
||||
"""
|
||||
parentId = parentIdin
|
||||
if parentId is None:
|
||||
parentId = base.localAvatar.defaultShard
|
||||
|
||||
# move the avatar
|
||||
self.sendSetLocation(base.localAvatar.doId,parentId,zoneId)
|
||||
# move the avatar
|
||||
self.sendSetLocation(base.localAvatar.doId,parentId,zoneId)
|
||||
|
||||
# move the interest
|
||||
InterestZones = zoneId
|
||||
if visibleZoneList is not None:
|
||||
InterestZones = visibleZoneList
|
||||
# move the interest
|
||||
InterestZones = zoneId
|
||||
if visibleZoneList is not None:
|
||||
InterestZones = visibleZoneList
|
||||
|
||||
if(self.old_setzone_interest_handle == None):
|
||||
self.old_setzone_interest_handle = self.addInterest(
|
||||
parentId, InterestZones, "OldSetZone Imulator", event)
|
||||
else:
|
||||
self.alterInterest(self.old_setzone_interest_handle,
|
||||
parentId, InterestZones, "OldSetZone Imulator", event)
|
||||
if(self.old_setzone_interest_handle == None):
|
||||
self.old_setzone_interest_handle = self.addInterest(
|
||||
parentId, InterestZones, "OldSetZone Imulator", event)
|
||||
else:
|
||||
self.alterInterest(self.old_setzone_interest_handle,
|
||||
parentId, InterestZones, "OldSetZone Imulator", event)
|
||||
|
||||
def sendEmulateSetZoneOff(self):
|
||||
MyAvID = base.localAvatar.doId
|
||||
self.sendSetLocation(MyAvID,0,0)
|
||||
if self.old_setzone_interest_handle is not None:
|
||||
self.removeInterest(self.old_setzone_interest_handle)
|
||||
self.old_setzone_interest_handle = None
|
||||
def sendEmulateSetZoneOff(self):
|
||||
MyAvID = base.localAvatar.doId
|
||||
self.sendSetLocation(MyAvID,0,0)
|
||||
if self.old_setzone_interest_handle is not None:
|
||||
self.removeInterest(self.old_setzone_interest_handle)
|
||||
self.old_setzone_interest_handle = None
|
||||
|
||||
|
||||
def sendSetLocation(self,doId,parentId,zoneId):
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint16(CLIENT_OBJECT_LOCATION)
|
||||
datagram.addUint32(doId)
|
||||
datagram.addUint32(parentId)
|
||||
datagram.addUint32(zoneId)
|
||||
self.send(datagram)
|
||||
|
||||
else:
|
||||
def sendSetZoneMsg(self, zoneId, visibleZoneList=None):
|
||||
datagram = PyDatagram()
|
||||
# Add message type
|
||||
datagram.addUint16(CLIENT_SET_ZONE)
|
||||
# Add zone id
|
||||
datagram.addUint32(zoneId)
|
||||
|
||||
# if we have an explicit list of visible zones, add them
|
||||
if visibleZoneList is not None:
|
||||
vzl = list(visibleZoneList)
|
||||
vzl.sort()
|
||||
assert PythonUtil.uniqueElements(vzl)
|
||||
for zone in vzl:
|
||||
datagram.addUint32(zone)
|
||||
|
||||
# send the message
|
||||
self.send(datagram)
|
||||
|
||||
assert self.setZonesRequested >= self.setZonesReceived
|
||||
self.setZonesRequested += 1
|
||||
|
||||
# override if desired
|
||||
def handleSetZoneDone(self):
|
||||
pass
|
||||
def sendSetLocation(self,doId,parentId,zoneId):
|
||||
datagram = PyDatagram()
|
||||
datagram.addUint16(CLIENT_OBJECT_LOCATION)
|
||||
datagram.addUint32(doId)
|
||||
datagram.addUint32(parentId)
|
||||
datagram.addUint32(zoneId)
|
||||
self.send(datagram)
|
||||
|
||||
def handleDatagram(self, di):
|
||||
if self.notify.getDebug():
|
||||
|
|
@ -799,10 +708,6 @@ class ClientRepository(ConnectionRepository):
|
|||
|
||||
msgType = self.getMsgType()
|
||||
|
||||
if not wantOtpServer:
|
||||
if msgType == CLIENT_DONE_SET_ZONE_RESP:
|
||||
self.handleSetZoneDone()
|
||||
|
||||
if self.handler == None:
|
||||
self.handleMessageType(msgType, di)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -183,10 +183,9 @@ class DistributedObject(PandaObject):
|
|||
if self.activeState != ESDisabled:
|
||||
self.activeState = ESDisabled
|
||||
self.__callbacks = {}
|
||||
if wantOtpServer:
|
||||
#self.cr.deleteObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
self.setLocation(None, None)
|
||||
# TODO: disable my children
|
||||
#self.cr.deleteObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
self.setLocation(None, None)
|
||||
# TODO: disable my children
|
||||
|
||||
def isDisabled(self):
|
||||
"""
|
||||
|
|
@ -371,86 +370,85 @@ class DistributedObject(PandaObject):
|
|||
else:
|
||||
assert(self.notify.debug('doneBarrier(%s) ignored; no active barrier.' % (name)))
|
||||
|
||||
if wantOtpServer:
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.cr.addInterest(self.getDoId(), zoneId, note, event)
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.cr.addInterest(self.getDoId(), zoneId, note, event)
|
||||
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.cr.sendSetLocation(self.doId, parentId, zoneId)
|
||||
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.cr.sendSetLocation(self.doId, parentId, zoneId)
|
||||
|
||||
#self.notify.info("setLocation: %s parentId: %s zoneId: %s" % (self.doId, parentId, zoneId))
|
||||
# parentId can be 'None', e.g. when an object is being disabled
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
parentIsNew = (oldParentId != parentId)
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
|
||||
# notify any existing parent that we're moving away
|
||||
if (oldParentId is not None) and parentIsNew:
|
||||
oldParentObj = self.cr.doId2do.get(oldParentId)
|
||||
if oldParentObj:
|
||||
oldParentObj.handleChildLeave(self, oldZoneId)
|
||||
#self.notify.info("setLocation: %s parentId: %s zoneId: %s" % (self.doId, parentId, zoneId))
|
||||
# parentId can be 'None', e.g. when an object is being disabled
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
parentIsNew = (oldParentId != parentId)
|
||||
|
||||
# The store must run first so we know the old location
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.cr.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
# notify any existing parent that we're moving away
|
||||
if (oldParentId is not None) and parentIsNew:
|
||||
oldParentObj = self.cr.doId2do.get(oldParentId)
|
||||
if oldParentObj:
|
||||
oldParentObj.handleChildLeave(self, oldZoneId)
|
||||
|
||||
# Give the parent a chance to run code when a new child
|
||||
# sets location to it. For example, the parent may want to
|
||||
# scene graph reparent the child to some subnode it owns.
|
||||
if (self.parentId is not None) and parentIsNew:
|
||||
parentObj = self.cr.doId2do.get(parentId)
|
||||
if parentObj:
|
||||
parentObj.handleChildArrive(self, zoneId)
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId == 0 and self.zoneId == 0:
|
||||
return None
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
# The store must run first so we know the old location
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.cr.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
|
||||
# Give the parent a chance to run code when a new child
|
||||
# sets location to it. For example, the parent may want to
|
||||
# scene graph reparent the child to some subnode it owns.
|
||||
if (self.parentId is not None) and parentIsNew:
|
||||
parentObj = self.cr.doId2do.get(parentId)
|
||||
if parentObj:
|
||||
parentObj.handleChildArrive(self, zoneId)
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId == 0 and self.zoneId == 0:
|
||||
return None
|
||||
|
||||
def handleChildArrive(self, childObj, zoneId):
|
||||
self.notify.debugCall()
|
||||
# A new child has just setLocation beneath us. Give us a
|
||||
# chance to run code when a new child sets location to us. For
|
||||
# example, we may want to scene graph reparent the child to
|
||||
# some subnode we own.
|
||||
## zone=self.children.setdefault(zoneId, {})
|
||||
## zone[childObj.doId]=childObj
|
||||
|
||||
# Inheritors should override
|
||||
pass
|
||||
|
||||
def handleChildLeave(self, childObj, zoneId):
|
||||
self.notify.debugCall()
|
||||
# A child is about to setLocation away from us. Give us a
|
||||
# chance to run code just before a child sets location away from us.
|
||||
## zone=self.children[zoneId]
|
||||
## del zone[childObj.doId]
|
||||
## if not len(zone):
|
||||
## del self.children[zoneId]
|
||||
|
||||
# Inheritors should override
|
||||
pass
|
||||
|
||||
def getParentObj(self):
|
||||
if self.parentId is None:
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return self.cr.doId2do.get(self.parentId)
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
def handleChildArrive(self, childObj, zoneId):
|
||||
self.notify.debugCall()
|
||||
# A new child has just setLocation beneath us. Give us a
|
||||
# chance to run code when a new child sets location to us. For
|
||||
# example, we may want to scene graph reparent the child to
|
||||
# some subnode we own.
|
||||
## zone=self.children.setdefault(zoneId, {})
|
||||
## zone[childObj.doId]=childObj
|
||||
|
||||
# Inheritors should override
|
||||
pass
|
||||
|
||||
def handleChildLeave(self, childObj, zoneId):
|
||||
self.notify.debugCall()
|
||||
# A child is about to setLocation away from us. Give us a
|
||||
# chance to run code just before a child sets location away from us.
|
||||
## zone=self.children[zoneId]
|
||||
## del zone[childObj.doId]
|
||||
## if not len(zone):
|
||||
## del self.children[zoneId]
|
||||
|
||||
# Inheritors should override
|
||||
pass
|
||||
|
||||
def getParentObj(self):
|
||||
if self.parentId is None:
|
||||
return None
|
||||
return self.cr.doId2do.get(self.parentId)
|
||||
|
||||
def isLocal(self):
|
||||
# This returns true if the distributed object is "local,"
|
||||
|
|
|
|||
|
|
@ -175,71 +175,55 @@ class DistributedObjectAI(DirectObject):
|
|||
self.__generated = True
|
||||
messenger.send(self.uniqueName("generate"), [self])
|
||||
|
||||
if wantOtpServer:
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.air.addInterest(self.getDoId(), zoneId, note, event)
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.air.addInterest(self.getDoId(), zoneId, note, event)
|
||||
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.air.sendSetLocation(self, parentId, zoneId)
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.air.sendSetLocation(self, parentId, zoneId)
|
||||
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
if ((oldParentId != parentId) or
|
||||
(oldZoneId != zoneId)):
|
||||
#print "%s location is now %s, %s (%s)"%(self.doId, parentId, zoneId, self)
|
||||
self.zoneId = zoneId
|
||||
self.parentId = parentId
|
||||
self.air.changeDOZoneInTables(self, parentId, zoneId, oldParentId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [zoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone
|
||||
# change message
|
||||
if zoneId != DistributedObjectAI.QuietZone:
|
||||
lastLogicalZone = oldZoneId
|
||||
if oldZoneId == DistributedObjectAI.QuietZone:
|
||||
lastLogicalZone = self.lastNonQuietZone
|
||||
self.handleLogicalZoneChange(zoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = zoneId
|
||||
self.air.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
|
||||
# Set the initial values of parentId,zoneId
|
||||
def setInitLocation(self, parentId, zoneId):
|
||||
self.parentId=parentId
|
||||
self.zoneId=zoneId
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId <= 0 and self.zoneId <= 0:
|
||||
return None
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
else:
|
||||
# NON OTP
|
||||
def handleZoneChange(self, newZoneId, oldZoneId):
|
||||
self.zoneId = newZoneId
|
||||
self.air.changeDOZoneInTables(self, newZoneId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [newZoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone change
|
||||
# message
|
||||
if newZoneId != DistributedObjectAI.QuietZone:
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
if ((oldParentId != parentId) or
|
||||
(oldZoneId != zoneId)):
|
||||
#print "%s location is now %s, %s (%s)"%(self.doId, parentId, zoneId, self)
|
||||
self.zoneId = zoneId
|
||||
self.parentId = parentId
|
||||
self.air.changeDOZoneInTables(self, parentId, zoneId, oldParentId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [zoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone
|
||||
# change message
|
||||
if zoneId != DistributedObjectAI.QuietZone:
|
||||
lastLogicalZone = oldZoneId
|
||||
if oldZoneId == DistributedObjectAI.QuietZone:
|
||||
lastLogicalZone = self.lastNonQuietZone
|
||||
self.handleLogicalZoneChange(newZoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = newZoneId
|
||||
self.handleLogicalZoneChange(zoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = zoneId
|
||||
self.air.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
|
||||
# Set the initial values of parentId,zoneId
|
||||
def setInitLocation(self, parentId, zoneId):
|
||||
self.parentId=parentId
|
||||
self.zoneId=zoneId
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId <= 0 and self.zoneId <= 0:
|
||||
return None
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
def updateRequiredFields(self, dclass, di):
|
||||
dclass.receiveUpdateBroadcastRequired(self, di)
|
||||
|
|
@ -300,113 +284,78 @@ class DistributedObjectAI(DirectObject):
|
|||
if self.air:
|
||||
self.air.sendUpdate(self, fieldName, args)
|
||||
|
||||
if wantOtpServer:
|
||||
def GetPuppetConnectionChannel(self, doId):
|
||||
return doId + (1L << 32)
|
||||
def GetPuppetConnectionChannel(self, doId):
|
||||
return doId + (1L << 32)
|
||||
|
||||
def GetAccountIDFromChannelCode(self, channel):
|
||||
return channel >> 32
|
||||
def GetAccountIDFromChannelCode(self, channel):
|
||||
return channel >> 32
|
||||
|
||||
def GetAvatarIDFromChannelCode(self, channel):
|
||||
return channel & 0xffffffffL
|
||||
def GetAvatarIDFromChannelCode(self, channel):
|
||||
return channel & 0xffffffffL
|
||||
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = self.GetPuppetConnectionChannel(avId)
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
else:
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = avId + 1
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = self.GetPuppetConnectionChannel(avId)
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
|
||||
def sendUpdateToChannel(self, channelId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
if self.air:
|
||||
self.air.sendUpdateToChannel(self, channelId, fieldName, args)
|
||||
|
||||
if wantOtpServer:
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
|
||||
# The repository is the one that really does the work
|
||||
parentId = self.air.districtId
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.air.generateWithRequired(self, parentId, zoneId, optionalFields)
|
||||
self.generate()
|
||||
else:
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequired(self, zoneId, optionalFields)
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
# The repository is the one that really does the work
|
||||
parentId = self.air.districtId
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.air.generateWithRequired(self, parentId, zoneId, optionalFields)
|
||||
self.generate()
|
||||
|
||||
# this is a special generate used for estates, or anything else that
|
||||
# needs to have a hard coded doId as assigned by the server
|
||||
if wantOtpServer:
|
||||
def generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
def generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields)
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
else:
|
||||
def generateWithRequiredAndId(self, doId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields)
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, zoneId, optionalFields)
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
def generateOtpObject(self, parentId, zoneId, optionalFields=[], doId=None):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId is None or doId == self.__preallocDoId
|
||||
doId=self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
|
||||
if wantOtpServer:
|
||||
def generateOtpObject(self, parentId, zoneId, optionalFields=[], doId=None):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId is None or doId == self.__preallocDoId
|
||||
doId=self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
# Assign it an id
|
||||
if doId is None:
|
||||
self.doId = self.air.allocateChannel()
|
||||
else:
|
||||
self.doId = doId
|
||||
# Put the new DO in the dictionaries
|
||||
self.air.addDOToTables(self, location=(parentId,zoneId))
|
||||
# Send a generate message
|
||||
self.sendGenerateWithRequired(self.air, parentId, zoneId, optionalFields)
|
||||
|
||||
# Assign it an id
|
||||
if doId is None:
|
||||
self.doId = self.air.allocateChannel()
|
||||
else:
|
||||
self.doId = doId
|
||||
# Put the new DO in the dictionaries
|
||||
self.air.addDOToTables(self, location=(parentId,zoneId))
|
||||
# Send a generate message
|
||||
self.sendGenerateWithRequired(self.air, parentId, zoneId, optionalFields)
|
||||
|
||||
assert not hasattr(self, 'parentId') or self.parentId is None
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
assert not hasattr(self, 'parentId') or self.parentId is None
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
|
||||
def generate(self):
|
||||
"""
|
||||
|
|
@ -414,39 +363,30 @@ class DistributedObjectAI(DirectObject):
|
|||
other networked info in this function.
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
if wantOtpServer:
|
||||
self.air.storeObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
self.air.storeObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
|
||||
if wantOtpServer:
|
||||
def generateInit(self, repository=None):
|
||||
"""
|
||||
First generate (not from cache).
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
def generateInit(self, repository=None):
|
||||
"""
|
||||
First generate (not from cache).
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
|
||||
def generateTargetChannel(self, repository):
|
||||
"""
|
||||
Who to send this to for generate messages
|
||||
"""
|
||||
if hasattr(self, "dbObject"):
|
||||
return self.doId
|
||||
return repository.serverId
|
||||
def generateTargetChannel(self, repository):
|
||||
"""
|
||||
Who to send this to for generate messages
|
||||
"""
|
||||
if hasattr(self, "dbObject"):
|
||||
return self.doId
|
||||
return repository.serverId
|
||||
|
||||
def sendGenerateWithRequired(self, repository, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
if not wantOtpServer:
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, 0, zoneId,
|
||||
repository.districtId,
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
else:
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, parentId, zoneId,
|
||||
#repository.serverId,
|
||||
self.generateTargetChannel(repository),
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, parentId, zoneId,
|
||||
#repository.serverId,
|
||||
self.generateTargetChannel(repository),
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
repository.send(dg)
|
||||
|
||||
def initFromServerResponse(self, valDict):
|
||||
|
|
|
|||
|
|
@ -170,71 +170,55 @@ class DistributedObjectUD(DirectObject):
|
|||
self.__generated = True
|
||||
messenger.send(self.uniqueName("generate"), [self])
|
||||
|
||||
if wantOtpServer:
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.air.addInterest(self.getDoId(), zoneId, note, event)
|
||||
def addInterest(self, zoneId, note="", event=None):
|
||||
self.air.addInterest(self.getDoId(), zoneId, note, event)
|
||||
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
def b_setLocation(self, parentId, zoneId):
|
||||
self.d_setLocation(parentId, zoneId)
|
||||
self.setLocation(parentId, zoneId)
|
||||
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.air.sendSetLocation(self, parentId, zoneId)
|
||||
def d_setLocation(self, parentId, zoneId):
|
||||
self.air.sendSetLocation(self, parentId, zoneId)
|
||||
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
def setLocation(self, parentId, zoneId):
|
||||
# Prevent Duplicate SetLocations for being Called
|
||||
if (self.parentId == parentId) and (self.zoneId == zoneId):
|
||||
return
|
||||
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
if ((oldParentId != parentId) or
|
||||
(oldZoneId != zoneId)):
|
||||
#print "%s location is now %s, %s (%s)"%(self.doId, parentId, zoneId, self)
|
||||
self.zoneId = zoneId
|
||||
self.parentId = parentId
|
||||
self.air.changeDOZoneInTables(self, parentId, zoneId, oldParentId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [zoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone
|
||||
# change message
|
||||
if zoneId != DistributedObjectUD.QuietZone:
|
||||
lastLogicalZone = oldZoneId
|
||||
if oldZoneId == DistributedObjectUD.QuietZone:
|
||||
lastLogicalZone = self.lastNonQuietZone
|
||||
self.handleLogicalZoneChange(zoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = zoneId
|
||||
self.air.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
|
||||
# Set the initial values of parentId,zoneId
|
||||
def setInitLocation(self, parentId, zoneId):
|
||||
self.parentId=parentId
|
||||
self.zoneId=zoneId
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId <= 0 and self.zoneId <= 0:
|
||||
return None
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
else:
|
||||
# NON OTP
|
||||
def handleZoneChange(self, newZoneId, oldZoneId):
|
||||
self.zoneId = newZoneId
|
||||
self.air.changeDOZoneInTables(self, newZoneId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [newZoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone change
|
||||
# message
|
||||
if newZoneId != DistributedObjectUD.QuietZone:
|
||||
oldParentId = self.parentId
|
||||
oldZoneId = self.zoneId
|
||||
if ((oldParentId != parentId) or
|
||||
(oldZoneId != zoneId)):
|
||||
#print "%s location is now %s, %s (%s)"%(self.doId, parentId, zoneId, self)
|
||||
self.zoneId = zoneId
|
||||
self.parentId = parentId
|
||||
self.air.changeDOZoneInTables(self, parentId, zoneId, oldParentId, oldZoneId)
|
||||
messenger.send(self.getZoneChangeEvent(), [zoneId, oldZoneId])
|
||||
# if we are not going into the quiet zone, send a 'logical' zone
|
||||
# change message
|
||||
if zoneId != DistributedObjectUD.QuietZone:
|
||||
lastLogicalZone = oldZoneId
|
||||
if oldZoneId == DistributedObjectUD.QuietZone:
|
||||
lastLogicalZone = self.lastNonQuietZone
|
||||
self.handleLogicalZoneChange(newZoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = newZoneId
|
||||
self.handleLogicalZoneChange(zoneId, lastLogicalZone)
|
||||
self.lastNonQuietZone = zoneId
|
||||
self.air.storeObjectLocation(self.doId, parentId, zoneId)
|
||||
|
||||
# Set the initial values of parentId,zoneId
|
||||
def setInitLocation(self, parentId, zoneId):
|
||||
self.parentId=parentId
|
||||
self.zoneId=zoneId
|
||||
|
||||
def getLocation(self):
|
||||
try:
|
||||
if self.parentId <= 0 and self.zoneId <= 0:
|
||||
return None
|
||||
# This is a -1 stuffed into a uint32
|
||||
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||
return None
|
||||
return (self.parentId, self.zoneId)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
def updateRequiredFields(self, dclass, di):
|
||||
dclass.receiveUpdateBroadcastRequired(self, di)
|
||||
|
|
@ -295,113 +279,78 @@ class DistributedObjectUD(DirectObject):
|
|||
if self.air:
|
||||
self.air.sendUpdate(self, fieldName, args)
|
||||
|
||||
if wantOtpServer:
|
||||
def GetPuppetConnectionChannel(self, doId):
|
||||
return doId + (1L << 32)
|
||||
def GetPuppetConnectionChannel(self, doId):
|
||||
return doId + (1L << 32)
|
||||
|
||||
def GetAccountIDFromChannelCode(self, channel):
|
||||
return channel >> 32
|
||||
def GetAccountIDFromChannelCode(self, channel):
|
||||
return channel >> 32
|
||||
|
||||
def GetAvatarIDFromChannelCode(self, channel):
|
||||
return channel & 0xffffffffL
|
||||
def GetAvatarIDFromChannelCode(self, channel):
|
||||
return channel & 0xffffffffL
|
||||
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = self.GetPuppetConnectionChannel(avId)
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
else:
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = avId + 1
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
def sendUpdateToAvatarId(self, avId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
channelId = self.GetPuppetConnectionChannel(avId)
|
||||
self.sendUpdateToChannel(channelId, fieldName, args)
|
||||
|
||||
def sendUpdateToChannel(self, channelId, fieldName, args):
|
||||
assert self.notify.debugStateCall(self)
|
||||
if self.air:
|
||||
self.air.sendUpdateToChannel(self, channelId, fieldName, args)
|
||||
|
||||
if wantOtpServer:
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
|
||||
# The repository is the one that really does the work
|
||||
parentId = self.air.districtId
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.air.generateWithRequired(self, parentId, zoneId, optionalFields)
|
||||
self.generate()
|
||||
else:
|
||||
def generateWithRequired(self, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
self.__preallocDoId = 0
|
||||
return self.generateWithRequiredAndId(
|
||||
self.doId, zoneId, optionalFields)
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequired(self, zoneId, optionalFields)
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
# The repository is the one that really does the work
|
||||
parentId = self.air.districtId
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.air.generateWithRequired(self, parentId, zoneId, optionalFields)
|
||||
self.generate()
|
||||
|
||||
# this is a special generate used for estates, or anything else that
|
||||
# needs to have a hard coded doId as assigned by the server
|
||||
if wantOtpServer:
|
||||
def generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
def generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields)
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
else:
|
||||
def generateWithRequiredAndId(self, doId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId == self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, parentId, zoneId, optionalFields)
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
|
||||
# The repository is the one that really does the work
|
||||
self.air.generateWithRequiredAndId(self, doId, zoneId, optionalFields)
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
self.announceGenerate()
|
||||
def generateOtpObject(self, parentId, zoneId, optionalFields=[], doId=None):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId is None or doId == self.__preallocDoId
|
||||
doId=self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
|
||||
if wantOtpServer:
|
||||
def generateOtpObject(self, parentId, zoneId, optionalFields=[], doId=None):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# have we already allocated a doId?
|
||||
if self.__preallocDoId:
|
||||
assert doId is None or doId == self.__preallocDoId
|
||||
doId=self.__preallocDoId
|
||||
self.__preallocDoId = 0
|
||||
# Assign it an id
|
||||
if doId is None:
|
||||
self.doId = self.air.allocateChannel()
|
||||
else:
|
||||
self.doId = doId
|
||||
# Put the new DO in the dictionaries
|
||||
self.air.addDOToTables(self, location=(parentId,zoneId))
|
||||
# Send a generate message
|
||||
self.sendGenerateWithRequired(self.air, parentId, zoneId, optionalFields)
|
||||
|
||||
# Assign it an id
|
||||
if doId is None:
|
||||
self.doId = self.air.allocateChannel()
|
||||
else:
|
||||
self.doId = doId
|
||||
# Put the new DO in the dictionaries
|
||||
self.air.addDOToTables(self, location=(parentId,zoneId))
|
||||
# Send a generate message
|
||||
self.sendGenerateWithRequired(self.air, parentId, zoneId, optionalFields)
|
||||
|
||||
assert not hasattr(self, 'parentId') or self.parentId is None
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
assert not hasattr(self, 'parentId') or self.parentId is None
|
||||
self.parentId = parentId
|
||||
self.zoneId = zoneId
|
||||
self.generate()
|
||||
|
||||
def generate(self):
|
||||
"""
|
||||
|
|
@ -409,39 +358,30 @@ class DistributedObjectUD(DirectObject):
|
|||
other networked info in this function.
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
if wantOtpServer:
|
||||
self.air.storeObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
self.air.storeObjectLocation(self.doId, self.parentId, self.zoneId)
|
||||
|
||||
if wantOtpServer:
|
||||
def generateInit(self, repository=None):
|
||||
"""
|
||||
First generate (not from cache).
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
def generateInit(self, repository=None):
|
||||
"""
|
||||
First generate (not from cache).
|
||||
"""
|
||||
assert self.notify.debugStateCall(self)
|
||||
|
||||
def generateTargetChannel(self, repository):
|
||||
"""
|
||||
Who to send this to for generate messages
|
||||
"""
|
||||
if hasattr(self, "dbObject"):
|
||||
return self.doId
|
||||
return repository.serverId
|
||||
def generateTargetChannel(self, repository):
|
||||
"""
|
||||
Who to send this to for generate messages
|
||||
"""
|
||||
if hasattr(self, "dbObject"):
|
||||
return self.doId
|
||||
return repository.serverId
|
||||
|
||||
def sendGenerateWithRequired(self, repository, parentId, zoneId, optionalFields=[]):
|
||||
assert self.notify.debugStateCall(self)
|
||||
if not wantOtpServer:
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, 0, zoneId,
|
||||
repository.districtId,
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
else:
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, parentId, zoneId,
|
||||
#repository.serverId,
|
||||
self.generateTargetChannel(repository),
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
dg = self.dclass.aiFormatGenerate(
|
||||
self, self.doId, parentId, zoneId,
|
||||
#repository.serverId,
|
||||
self.generateTargetChannel(repository),
|
||||
repository.ourChannel,
|
||||
optionalFields)
|
||||
repository.send(dg)
|
||||
|
||||
def initFromServerResponse(self, valDict):
|
||||
|
|
|
|||
|
|
@ -6,17 +6,15 @@ class DoCollectionManager:
|
|||
def __init__(self):
|
||||
# Dict of {DistributedObject ids : DistributedObjects}
|
||||
self.doId2do = {}
|
||||
# for OTP: (parentId, zoneId) to dict of doId->DistributedObjectAI
|
||||
# for NON-OTP: zoneId to dict of doId->DistributedObjectAI
|
||||
# (parentId, zoneId) to dict of doId->DistributedObjectAI
|
||||
self.zoneId2doIds={}
|
||||
if self.hasOwnerView():
|
||||
# Dict of {DistributedObject ids : DistributedObjects} for 'owner' views of objects
|
||||
self.doId2ownerView = {}
|
||||
if wantOtpServer:
|
||||
# Dict of {
|
||||
# parent DistributedObject id:
|
||||
# { zoneIds : [child DistributedObject ids] }}
|
||||
self.__doHierarchy = {}
|
||||
# Dict of {
|
||||
# parent DistributedObject id:
|
||||
# { zoneIds : [child DistributedObject ids] }}
|
||||
self.__doHierarchy = {}
|
||||
|
||||
def getDo(self, doId):
|
||||
return self.doId2do.get(doId)
|
||||
|
|
@ -159,220 +157,151 @@ class DoCollectionManager:
|
|||
'zoneId2doIds table not empty: %s' % self.zoneId2doIds)
|
||||
self.zoneId2doIds = {}
|
||||
|
||||
if wantOtpServer:
|
||||
def handleObjectLocation(self, di):
|
||||
# CLIENT_OBJECT_LOCATION
|
||||
doId = di.getUint32()
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
self.notify.debug(
|
||||
"handleObjectLocation: doId: %s parentId: %s zoneId: %s"%
|
||||
(doId, parentId, zoneId))
|
||||
# Let the object finish the job
|
||||
obj.setLocation(parentId, zoneId)
|
||||
self.storeObjectLocation(doId, parentId, zoneId)
|
||||
else:
|
||||
self.notify.warning(
|
||||
"handleObjectLocation: Asked to update non-existent obj: %s" % (doId))
|
||||
|
||||
def handleSetLocation(self, di):
|
||||
# This was initially added because creating a distributed quest
|
||||
# object would cause a message like this to be generated.
|
||||
assert self.notify.debugStateCall(self)
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
distObj = self.doId2do.get(self.getMsgChannel())
|
||||
if distObj is not None:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
def handleObjectLocation(self, di):
|
||||
# CLIENT_OBJECT_LOCATION
|
||||
doId = di.getUint32()
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
self.notify.debug(
|
||||
"handleObjectLocation: doId: %s parentId: %s zoneId: %s"%
|
||||
(doId, parentId, zoneId))
|
||||
# Let the object finish the job
|
||||
obj.setLocation(parentId, zoneId)
|
||||
self.storeObjectLocation(doId, parentId, zoneId)
|
||||
else:
|
||||
self.notify.warning(
|
||||
"handleObjectLocation: Asked to update non-existent obj: %s" % (doId))
|
||||
|
||||
def storeObjectLocation(self, doId, parentId, zoneId):
|
||||
if (parentId is None) or (zoneId is None):
|
||||
# Do not store null values
|
||||
return
|
||||
# TODO: check current location
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
oldParentId = obj.parentId
|
||||
oldZoneId = obj.zoneId
|
||||
def handleSetLocation(self, di):
|
||||
# This was initially added because creating a distributed quest
|
||||
# object would cause a message like this to be generated.
|
||||
assert self.notify.debugStateCall(self)
|
||||
parentId = di.getUint32()
|
||||
zoneId = di.getUint32()
|
||||
distObj = self.doId2do.get(self.getMsgChannel())
|
||||
if distObj is not None:
|
||||
distObj.setLocation(parentId, zoneId)
|
||||
|
||||
if oldParentId != parentId:
|
||||
# Remove old location
|
||||
parentZoneDict = self.__doHierarchy.get(oldParentId)
|
||||
if parentZoneDict is not None:
|
||||
zoneDoSet = parentZoneDict.get(oldZoneId)
|
||||
if zoneDoSet is not None and doId in zoneDoSet:
|
||||
zoneDoSet.remove(doId)
|
||||
if len(zoneDoSet) == 0:
|
||||
del parentZoneDict[oldZoneId]
|
||||
# Add to new location
|
||||
parentZoneDict = self.__doHierarchy.setdefault(parentId, {})
|
||||
zoneDoSet = parentZoneDict.setdefault(zoneId, set())
|
||||
zoneDoSet.add(doId)
|
||||
def storeObjectLocation(self, doId, parentId, zoneId):
|
||||
if (parentId is None) or (zoneId is None):
|
||||
# Do not store null values
|
||||
return
|
||||
# TODO: check current location
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
oldParentId = obj.parentId
|
||||
oldZoneId = obj.zoneId
|
||||
|
||||
def deleteObjectLocation(self, objId, parentId, zoneId):
|
||||
# Do not worry about null values
|
||||
if ((parentId is None) or (zoneId is None)):
|
||||
return
|
||||
parentZoneDict = self.__doHierarchy.get(parentId)
|
||||
assert(parentZoneDict is not None, "deleteObjectLocation: parentId: %s not found" % (parentId))
|
||||
objList = parentZoneDict.get(zoneId)
|
||||
assert(objList is not None, "deleteObjectLocation: zoneId: %s not found" % (zoneId))
|
||||
assert(objId in objList, "deleteObjectLocation: objId: %s not found" % (objId))
|
||||
if len(objList) == 1:
|
||||
# If this is the last obj in this zone, delete the entire entry
|
||||
del parentZoneDict[zoneId]
|
||||
else:
|
||||
# Just remove the object
|
||||
objList.remove(objId)
|
||||
if oldParentId != parentId:
|
||||
# Remove old location
|
||||
parentZoneDict = self.__doHierarchy.get(oldParentId)
|
||||
if parentZoneDict is not None:
|
||||
zoneDoSet = parentZoneDict.get(oldZoneId)
|
||||
if zoneDoSet is not None and doId in zoneDoSet:
|
||||
zoneDoSet.remove(doId)
|
||||
if len(zoneDoSet) == 0:
|
||||
del parentZoneDict[oldZoneId]
|
||||
# Add to new location
|
||||
parentZoneDict = self.__doHierarchy.setdefault(parentId, {})
|
||||
zoneDoSet = parentZoneDict.setdefault(zoneId, set())
|
||||
zoneDoSet.add(doId)
|
||||
|
||||
def deleteObjectLocation(self, objId, parentId, zoneId):
|
||||
# Do not worry about null values
|
||||
if ((parentId is None) or (zoneId is None)):
|
||||
return
|
||||
parentZoneDict = self.__doHierarchy.get(parentId)
|
||||
assert(parentZoneDict is not None, "deleteObjectLocation: parentId: %s not found" % (parentId))
|
||||
objList = parentZoneDict.get(zoneId)
|
||||
assert(objList is not None, "deleteObjectLocation: zoneId: %s not found" % (zoneId))
|
||||
assert(objId in objList, "deleteObjectLocation: objId: %s not found" % (objId))
|
||||
if len(objList) == 1:
|
||||
# If this is the last obj in this zone, delete the entire entry
|
||||
del parentZoneDict[zoneId]
|
||||
else:
|
||||
# Just remove the object
|
||||
objList.remove(objId)
|
||||
|
||||
if wantOtpServer:
|
||||
def addDOToTables(self, do, location=None, ownerView=False):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
if not ownerView:
|
||||
if location is None:
|
||||
location = (do.parentId, do.zoneId)
|
||||
def addDOToTables(self, do, location=None, ownerView=False):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
if not ownerView:
|
||||
if location is None:
|
||||
location = (do.parentId, do.zoneId)
|
||||
|
||||
doTable = self.getDoTable(ownerView)
|
||||
|
||||
#assert do.doId not in doTable
|
||||
if do.doId in doTable:
|
||||
print "ignoring repeated object %s" % (do.doId)
|
||||
return
|
||||
|
||||
doTable[do.doId]=do
|
||||
doTable = self.getDoTable(ownerView)
|
||||
|
||||
if not ownerView:
|
||||
if self.isValidLocationTuple(location):
|
||||
assert do.doId not in self.zoneId2doIds.get(location,{})
|
||||
self.zoneId2doIds.setdefault(location, {})
|
||||
self.zoneId2doIds[location][do.doId]=do
|
||||
#assert do.doId not in doTable
|
||||
if do.doId in doTable:
|
||||
print "ignoring repeated object %s" % (do.doId)
|
||||
return
|
||||
|
||||
def isValidLocationTuple(self, location):
|
||||
return (location is not None
|
||||
and location != (0xffffffff, 0xffffffff)
|
||||
and location != (0, 0))
|
||||
else:
|
||||
# NON OTP
|
||||
def addDOToTables(self, do, zoneId=None):
|
||||
assert self.notify.debugStateCall(self)
|
||||
if zoneId is None:
|
||||
zoneId = do.zoneId
|
||||
doTable[do.doId]=do
|
||||
|
||||
assert do.doId not in self.doId2do
|
||||
self.doId2do[do.doId]=do
|
||||
if not ownerView:
|
||||
if self.isValidLocationTuple(location):
|
||||
assert do.doId not in self.zoneId2doIds.get(location,{})
|
||||
self.zoneId2doIds.setdefault(location, {})
|
||||
self.zoneId2doIds[location][do.doId]=do
|
||||
|
||||
if zoneId is not None:
|
||||
assert do.doId not in self.zoneId2doIds.get(zoneId,{})
|
||||
self.zoneId2doIds.setdefault(zoneId, {})
|
||||
self.zoneId2doIds[zoneId][do.doId]=do
|
||||
|
||||
if wantOtpServer:
|
||||
def removeDOFromTables(self, do):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
#assert do.doId in self.doId2do
|
||||
location = do.getLocation()
|
||||
if location is not None:
|
||||
if location not in self.zoneId2doIds:
|
||||
self.notify.warning(
|
||||
'dobj %s (%s) has invalid location: %s' %
|
||||
(do, do.doId, location))
|
||||
else:
|
||||
assert do.doId in self.zoneId2doIds[location]
|
||||
del self.zoneId2doIds[location][do.doId]
|
||||
if len(self.zoneId2doIds[location]) == 0:
|
||||
del self.zoneId2doIds[location]
|
||||
if do.doId in self.doId2do:
|
||||
del self.doId2do[do.doId]
|
||||
else:
|
||||
def removeDOFromTables(self, do):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert do.doId in self.doId2do
|
||||
if do.zoneId is not None:
|
||||
if do.zoneId not in self.zoneId2doIds:
|
||||
self.notify.warning(
|
||||
'dobj %s (%s) has invalid zoneId: %s' %
|
||||
(do, do.doId, do.zoneId))
|
||||
else:
|
||||
assert do.doId in self.zoneId2doIds[do.zoneId]
|
||||
del(self.zoneId2doIds[do.zoneId][do.doId])
|
||||
if len(self.zoneId2doIds[do.zoneId]) == 0:
|
||||
del self.zoneId2doIds[do.zoneId]
|
||||
def isValidLocationTuple(self, location):
|
||||
return (location is not None
|
||||
and location != (0xffffffff, 0xffffffff)
|
||||
and location != (0, 0))
|
||||
|
||||
def removeDOFromTables(self, do):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
#assert do.doId in self.doId2do
|
||||
location = do.getLocation()
|
||||
if location is not None:
|
||||
if location not in self.zoneId2doIds:
|
||||
self.notify.warning(
|
||||
'dobj %s (%s) has invalid location: %s' %
|
||||
(do, do.doId, location))
|
||||
else:
|
||||
assert do.doId in self.zoneId2doIds[location]
|
||||
del self.zoneId2doIds[location][do.doId]
|
||||
if len(self.zoneId2doIds[location]) == 0:
|
||||
del self.zoneId2doIds[location]
|
||||
if do.doId in self.doId2do:
|
||||
del self.doId2do[do.doId]
|
||||
|
||||
if wantOtpServer:
|
||||
def changeDOZoneInTables(self, do, newParentId, newZoneId, oldParentId, oldZoneId):
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
oldLocation = (oldParentId, oldZoneId)
|
||||
newLocation = (newParentId, newZoneId)
|
||||
# HACK: DistributedGuildMemberUD starts in -1,-1, which isnt ever put in the
|
||||
# zoneId2doIds table
|
||||
if self.isValidLocationTuple(oldLocation):
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert oldLocation in self.zoneId2doIds
|
||||
assert do.doId in self.zoneId2doIds[oldLocation]
|
||||
assert do.doId not in self.zoneId2doIds.get(newLocation,{})
|
||||
# remove from old zone
|
||||
del(self.zoneId2doIds[oldLocation][do.doId])
|
||||
if len(self.zoneId2doIds[oldLocation]) == 0:
|
||||
del self.zoneId2doIds[oldLocation]
|
||||
if self.isValidLocationTuple(newLocation):
|
||||
# add to new zone
|
||||
self.zoneId2doIds.setdefault(newLocation, {})
|
||||
self.zoneId2doIds[newLocation][do.doId]=do
|
||||
|
||||
def getObjectsInZone(self, location):
|
||||
""" call this to get a dict of doId:distObj for a zone.
|
||||
Creates a shallow copy, so you can do whatever you want with the
|
||||
dict. """
|
||||
def changeDOZoneInTables(self, do, newParentId, newZoneId, oldParentId, oldZoneId):
|
||||
assert not hasattr(do, "isQueryAllResponse") or not do.isQueryAllResponse
|
||||
oldLocation = (oldParentId, oldZoneId)
|
||||
newLocation = (newParentId, newZoneId)
|
||||
# HACK: DistributedGuildMemberUD starts in -1,-1, which isnt ever put in the
|
||||
# zoneId2doIds table
|
||||
if self.isValidLocationTuple(oldLocation):
|
||||
assert self.notify.debugStateCall(self)
|
||||
return copy.copy(self.zoneId2doIds.get(location, {}))
|
||||
|
||||
def getObjectsOfClassInZone(self, location, objClass):
|
||||
""" returns dict of doId:object for a zone, containing all objects
|
||||
that inherit from 'class'. returned dict is safely mutable. """
|
||||
assert self.notify.debugStateCall(self)
|
||||
doDict = {}
|
||||
for doId, do in self.zoneId2doIds.get(location, {}).items():
|
||||
if isinstance(do, objClass):
|
||||
doDict[doId] = do
|
||||
return doDict
|
||||
|
||||
else:
|
||||
# NON OTP
|
||||
|
||||
def changeDOZoneInTables(self, do, newZoneId, oldZoneId):
|
||||
##print "changeDOZoneInTables:%s, dclass:%s, newZoneId:%s OldZoneId:%s"%(do.doId, do.dclass.getName(), newZoneId,oldZoneId)
|
||||
|
||||
assert self.notify.debugStateCall(self)
|
||||
assert oldZoneId in self.zoneId2doIds
|
||||
assert do.doId in self.zoneId2doIds[oldZoneId]
|
||||
assert do.doId not in self.zoneId2doIds.get(newZoneId,{})
|
||||
assert oldLocation in self.zoneId2doIds
|
||||
assert do.doId in self.zoneId2doIds[oldLocation]
|
||||
assert do.doId not in self.zoneId2doIds.get(newLocation,{})
|
||||
# remove from old zone
|
||||
del(self.zoneId2doIds[oldZoneId][do.doId])
|
||||
if len(self.zoneId2doIds[oldZoneId]) == 0:
|
||||
del self.zoneId2doIds[oldZoneId]
|
||||
del(self.zoneId2doIds[oldLocation][do.doId])
|
||||
if len(self.zoneId2doIds[oldLocation]) == 0:
|
||||
del self.zoneId2doIds[oldLocation]
|
||||
if self.isValidLocationTuple(newLocation):
|
||||
# add to new zone
|
||||
self.zoneId2doIds.setdefault(newZoneId, {})
|
||||
self.zoneId2doIds[newZoneId][do.doId]=do
|
||||
self.zoneId2doIds.setdefault(newLocation, {})
|
||||
self.zoneId2doIds[newLocation][do.doId]=do
|
||||
|
||||
def getObjectsInZone(self, zoneId):
|
||||
""" call this to get a dict of doId:distObj for a zone.
|
||||
Creates a shallow copy, so you can do whatever you want with the
|
||||
dict. """
|
||||
assert self.notify.debugStateCall(self)
|
||||
return copy.copy(self.zoneId2doIds.get(zoneId, {}))
|
||||
def getObjectsInZone(self, location):
|
||||
""" call this to get a dict of doId:distObj for a zone.
|
||||
Creates a shallow copy, so you can do whatever you want with the
|
||||
dict. """
|
||||
assert self.notify.debugStateCall(self)
|
||||
return copy.copy(self.zoneId2doIds.get(location, {}))
|
||||
|
||||
def getObjectsOfClassInZone(self, zoneId, objClass):
|
||||
""" returns dict of doId:object for a zone, containing all objects
|
||||
that inherit from 'class'. returned dict is safely mutable. """
|
||||
assert self.notify.debugStateCall(self)
|
||||
doDict = {}
|
||||
for doId, do in self.zoneId2doIds.get(zoneId, {}).items():
|
||||
if isinstance(do, objClass):
|
||||
doDict[doId] = do
|
||||
return doDict
|
||||
def getObjectsOfClassInZone(self, location, objClass):
|
||||
""" returns dict of doId:object for a zone, containing all objects
|
||||
that inherit from 'class'. returned dict is safely mutable. """
|
||||
assert self.notify.debugStateCall(self)
|
||||
doDict = {}
|
||||
for doId, do in self.zoneId2doIds.get(location, {}).items():
|
||||
if isinstance(do, objClass):
|
||||
doDict[doId] = do
|
||||
return doDict
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@ CLIENT_OBJECT_DISABLE_OWNER = 26
|
|||
CLIENT_OBJECT_DISABLE_OWNER_RESP = 26
|
||||
CLIENT_OBJECT_DELETE = 27
|
||||
CLIENT_OBJECT_DELETE_RESP = 27
|
||||
if not wantOtpServer:
|
||||
CLIENT_SET_ZONE = 29
|
||||
CLIENT_REMOVE_ZONE = 30
|
||||
if not wantOtpServer:
|
||||
CLIENT_SET_SHARD = 31
|
||||
CLIENT_SET_AVATAR = 32
|
||||
CLIENT_CREATE_OBJECT_REQUIRED = 34
|
||||
CLIENT_CREATE_OBJECT_REQUIRED_RESP = 34
|
||||
|
|
@ -49,10 +45,7 @@ CLIENT_DISCONNECT = 37
|
|||
CLIENT_CHANGE_IP_ADDRESS_RESP = 45
|
||||
CLIENT_GET_STATE = 46
|
||||
CLIENT_GET_STATE_RESP = 47
|
||||
if wantOtpServer:
|
||||
CLIENT_DONE_INTEREST_RESP = 48
|
||||
else:
|
||||
CLIENT_DONE_SET_ZONE_RESP = 48
|
||||
CLIENT_DONE_INTEREST_RESP = 48
|
||||
|
||||
CLIENT_DELETE_AVATAR = 49
|
||||
|
||||
|
|
@ -89,14 +82,13 @@ CLIENT_GET_PET_DETAILS = 81
|
|||
CLIENT_GET_PET_DETAILS_RESP = 82
|
||||
|
||||
# (Proposed new message): CLIENT_SET_WORLD_POS = 83
|
||||
if wantOtpServer:
|
||||
CLIENT_ADD_INTEREST = 97
|
||||
# This is no longer supported. Alter just calls ADD_INTEREST
|
||||
# CLIENT_ALTER_INTEREST = 98
|
||||
CLIENT_REMOVE_INTEREST = 99
|
||||
CLIENT_QUERY_ONE_FIELD = 101
|
||||
CLIENT_OBJECT_LOCATION = 102
|
||||
CLIENT_QUERY_ONE_FIELD_RESP = 103
|
||||
CLIENT_ADD_INTEREST = 97
|
||||
# This is no longer supported. Alter just calls ADD_INTEREST
|
||||
# CLIENT_ALTER_INTEREST = 98
|
||||
CLIENT_REMOVE_INTEREST = 99
|
||||
CLIENT_QUERY_ONE_FIELD = 101
|
||||
CLIENT_OBJECT_LOCATION = 102
|
||||
CLIENT_QUERY_ONE_FIELD_RESP = 103
|
||||
|
||||
# These messages are ignored when the client is headed to the quiet zone
|
||||
QUIET_ZONE_IGNORED_LIST = [
|
||||
|
|
|
|||
|
|
@ -239,7 +239,6 @@ class ShowBase(DirectObject.DirectObject):
|
|||
__builtins__["cvMgr"] = ConfigVariableManager.getGlobalPtr()
|
||||
__builtins__["pandaSystem"] = PandaSystem.getGlobalPtr()
|
||||
__builtins__["__dev__"] = base.config.GetBool('want-dev', 0)
|
||||
__builtins__["wantOtpServer"] = base.config.GetBool('want-otp-server', 0)
|
||||
__builtins__["wantUberdog"] = base.config.GetBool('want-uberdog', 1)
|
||||
if __debug__:
|
||||
__builtins__["deltaProfiler"] = DeltaProfiler.DeltaProfiler("ShowBase")
|
||||
|
|
|
|||
Loading…
Reference in New Issue