remove more astron stuff

This commit is contained in:
Open Toontown 2022-01-20 13:08:28 -05:00
parent 77b26fad6b
commit 5f03451383
5 changed files with 165 additions and 468 deletions

View File

@ -22,7 +22,6 @@ class AIBase:
def __init__(self): def __init__(self):
self.config = getConfigShowbase() self.config = getConfigShowbase()
__builtins__['__dev__'] = self.config.GetBool('want-dev', 0) __builtins__['__dev__'] = self.config.GetBool('want-dev', 0)
__builtins__['__astron__'] = self.config.GetBool('astron-support', 1)
__builtins__['__execWarnings__'] = self.config.GetBool('want-exec-warnings', 0) __builtins__['__execWarnings__'] = self.config.GetBool('want-exec-warnings', 0)
logStackDump = (self.config.GetBool('log-stack-dump', (not __debug__)) or self.config.GetBool('ai-log-stack-dump', (not __debug__))) logStackDump = (self.config.GetBool('log-stack-dump', (not __debug__)) or self.config.GetBool('ai-log-stack-dump', (not __debug__)))
uploadStackDump = self.config.GetBool('upload-stack-dump', 0) uploadStackDump = self.config.GetBool('upload-stack-dump', 0)
@ -58,7 +57,6 @@ class AIBase:
__builtins__['vfs'] = vfs __builtins__['vfs'] = vfs
__builtins__['hidden'] = self.hidden __builtins__['hidden'] = self.hidden
AIBase.notify.info('__dev__ == %s' % __dev__) AIBase.notify.info('__dev__ == %s' % __dev__)
AIBase.notify.info('__astron__ == %s' % __astron__)
PythonUtil.recordFunctorCreationStacks() PythonUtil.recordFunctorCreationStacks()
__builtins__['wantTestObject'] = self.config.GetBool('want-test-object', 0) __builtins__['wantTestObject'] = self.config.GetBool('want-test-object', 0)
self.wantStats = self.config.GetBool('want-pstats', 0) self.wantStats = self.config.GetBool('want-pstats', 0)

View File

@ -1,7 +0,0 @@
from direct.distributed import DistributedObject
class AstronAccount(DistributedObject.DistributedObject):
def __init__(self, cr):
pass

View File

@ -1,6 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectAI import DistributedObjectAI
class AstronAccountAI(DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory('AstronAccountAI')

View File

@ -1,6 +0,0 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectUD import DistributedObjectUD
class AstronAccountUD(DistributedObjectUD):
notify = DirectNotifyGlobal.directNotify.newCategory('AstronAccountUD')

View File

@ -30,7 +30,6 @@ from otp.login import LoginGoAccount
from otp.login.LoginWebPlayTokenAccount import LoginWebPlayTokenAccount from otp.login.LoginWebPlayTokenAccount import LoginWebPlayTokenAccount
from otp.login.LoginDISLTokenAccount import LoginDISLTokenAccount from otp.login.LoginDISLTokenAccount import LoginDISLTokenAccount
from otp.login import LoginTTAccount from otp.login import LoginTTAccount
from otp.login import LoginAstronAccount
from otp.login import HTTPUtil from otp.login import HTTPUtil
from otp.otpbase import OTPGlobals from otp.otpbase import OTPGlobals
from otp.otpbase import OTPLauncherGlobals from otp.otpbase import OTPLauncherGlobals
@ -165,10 +164,7 @@ class OTPClientRepository(ClientRepositoryBase):
self.accountOldAuth = ConfigVariableBool('%s-account-old-auth' % game.name, self.accountOldAuth = ConfigVariableBool('%s-account-old-auth' % game.name,
self.accountOldAuth).value self.accountOldAuth).value
self.useNewTTDevLogin = ConfigVariableBool('use-tt-specific-dev-login', False).value self.useNewTTDevLogin = ConfigVariableBool('use-tt-specific-dev-login', False).value
if __astron__: if self.useNewTTDevLogin:
self.loginInterface = LoginAstronAccount.LoginAstronAccount(self)
self.notify.info('loginInterface: LoginAstronAccount')
elif self.useNewTTDevLogin:
self.loginInterface = LoginTTSpecificDevAccount.LoginTTSpecificDevAccount(self) self.loginInterface = LoginTTSpecificDevAccount.LoginTTSpecificDevAccount(self)
self.notify.info('loginInterface: LoginTTSpecificDevAccount') self.notify.info('loginInterface: LoginTTSpecificDevAccount')
elif self.accountOldAuth: elif self.accountOldAuth:
@ -415,8 +411,6 @@ class OTPClientRepository(ClientRepositoryBase):
self.__pendingMessages = {} self.__pendingMessages = {}
self.__doId2pendingInterest = {} self.__doId2pendingInterest = {}
self.centralLogger = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_CENTRAL_LOGGER, 'CentralLogger') self.centralLogger = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_CENTRAL_LOGGER, 'CentralLogger')
if __astron__:
self.astronLoginManager = self.generateGlobalObject(OtpDoGlobals.OTP_DO_ID_ASTRON_LOGIN_MANAGER, 'AstronLoginManager')
def startLeakDetector(self): def startLeakDetector(self):
if hasattr(self, 'leakDetector'): if hasattr(self, 'leakDetector'):
@ -488,8 +482,7 @@ class OTPClientRepository(ClientRepositoryBase):
def gotoFirstScreen(self): def gotoFirstScreen(self):
self.startReaderPollTask() self.startReaderPollTask()
if not __astron__: self.startHeartbeat()
self.startHeartbeat()
self.loginFSM.request('login') self.loginFSM.request('login')
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
@ -904,8 +897,7 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterWaitForAvatarList(self): def enterWaitForAvatarList(self):
if not __astron__: self.handler = self.handleWaitForAvatarList
self.handler = self.handleWaitForAvatarList
self._requestAvatarList() self._requestAvatarList()
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
@ -916,12 +908,9 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def sendGetAvatarsMsg(self): def sendGetAvatarsMsg(self):
if __astron__: datagram = PyDatagram()
self.astronLoginManager.sendRequestAvatarList() datagram.addUint16(CLIENT_GET_AVATARS)
else: self.send(datagram)
datagram = PyDatagram()
datagram.addUint16(CLIENT_GET_AVATARS)
self.send(datagram)
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def exitWaitForAvatarList(self): def exitWaitForAvatarList(self):
@ -993,30 +982,6 @@ class OTPClientRepository(ClientRepositoryBase):
self.loginFSM.request('shutdown') self.loginFSM.request('shutdown')
return return
if __astron__:
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def handleAvatarListResponse(self, avatarList):
avList = []
for avNum, avName, avDNA, avPosition, nameState in avatarList:
avNames = ['',
'',
'',
'']
avNames[0] = avName
if nameState == 2: # Pending
avNames[1] = avName
elif nameState == 3: # Approved
avNames[2] = avName
elif nameState == 4: # Rejected
avNames[3] = avName
aname = int(nameState == 1)
potAv = PotentialAvatar(avNum, avNames, avDNA, avPosition, aname)
avList.append(potAv)
self.avList = avList
self.loginFSM.request('chooseAvatar', [self.avList])
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterChooseAvatar(self, avList): def enterChooseAvatar(self, avList):
pass pass
@ -1035,18 +1000,15 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def sendCreateAvatarMsg(self, avDNA, avName, avPosition): def sendCreateAvatarMsg(self, avDNA, avName, avPosition):
if __astron__: datagram = PyDatagram()
self.astronLoginManager.sendCreateAvatar(avDNA, avName, avPosition) datagram.addUint16(CLIENT_CREATE_AVATAR)
else: datagram.addUint16(0)
datagram = PyDatagram() datagram.addString(avDNA.makeNetString())
datagram.addUint16(CLIENT_CREATE_AVATAR) datagram.addUint8(avPosition)
datagram.addUint16(0) self.newName = avName
datagram.addBlob(avDNA.makeNetString()) self.newDNA = avDNA
datagram.addUint8(avPosition) self.newPosition = avPosition
self.newName = avName self.send(datagram)
self.newDNA = avDNA
self.newPosition = avPosition
self.send(datagram)
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def sendCreateAvatar2Msg(self, avClass, avDNA, avName, avPosition): def sendCreateAvatar2Msg(self, avClass, avDNA, avName, avPosition):
@ -1064,20 +1026,16 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterWaitForDeleteAvatarResponse(self, potAv): def enterWaitForDeleteAvatarResponse(self, potAv):
if not __astron__: self.handler = self.handleWaitForDeleteAvatarResponse
self.handler = self.handleWaitForDeleteAvatarResponse
self.sendDeleteAvatarMsg(potAv.id) self.sendDeleteAvatarMsg(potAv.id)
self.waitForDatabaseTimeout(requestName='WaitForDeleteAvatarResponse') self.waitForDatabaseTimeout(requestName='WaitForDeleteAvatarResponse')
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def sendDeleteAvatarMsg(self, avId): def sendDeleteAvatarMsg(self, avId):
if __astron__: datagram = PyDatagram()
self.astronLoginManager.sendRequestRemoveAvatar(avId) datagram.addUint16(CLIENT_DELETE_AVATAR)
else: datagram.addUint32(avId)
datagram = PyDatagram() self.send(datagram)
datagram.addUint16(CLIENT_DELETE_AVATAR)
datagram.addUint32(avId)
self.send(datagram)
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def exitWaitForDeleteAvatarResponse(self): def exitWaitForDeleteAvatarResponse(self):
@ -1115,8 +1073,7 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterWaitForSetAvatarResponse(self, potAv): def enterWaitForSetAvatarResponse(self, potAv):
if not __astron__: self.handler = self.handleWaitForSetAvatarResponse
self.handler = self.handleWaitForSetAvatarResponse
self.sendSetAvatarMsg(potAv) self.sendSetAvatarMsg(potAv)
self.waitForDatabaseTimeout(requestName='WaitForSetAvatarResponse') self.waitForDatabaseTimeout(requestName='WaitForSetAvatarResponse')
@ -1135,26 +1092,18 @@ class OTPClientRepository(ClientRepositoryBase):
def sendSetAvatarIdMsg(self, avId): def sendSetAvatarIdMsg(self, avId):
if avId != self.__currentAvId: if avId != self.__currentAvId:
self.__currentAvId = avId self.__currentAvId = avId
if __astron__: datagram = PyDatagram()
self.astronLoginManager.sendRequestPlayAvatar(avId) datagram.addUint16(CLIENT_SET_AVATAR)
else: datagram.addUint32(avId)
datagram = PyDatagram() self.send(datagram)
datagram.addUint16(CLIENT_SET_AVATAR)
datagram.addUint32(avId)
self.send(datagram)
if avId == 0: if avId == 0:
self.stopPeriodTimer() self.stopPeriodTimer()
else: else:
self.startPeriodTimer() self.startPeriodTimer()
if not __astron__: @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') def handleAvatarResponseMsg(self, di):
def handleAvatarResponseMsg(self, di): pass
pass
else:
@report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def handleAvatarResponseMsg(self, avatarId, di):
pass
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def handleWaitForSetAvatarResponse(self, msgType, di): def handleWaitForSetAvatarResponse(self, msgType, di):
@ -1404,8 +1353,7 @@ class OTPClientRepository(ClientRepositoryBase):
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterWaitOnEnterResponses(self, shardId, hoodId, zoneId, avId): def enterWaitOnEnterResponses(self, shardId, hoodId, zoneId, avId):
self.cleanGameExit = False self.cleanGameExit = False
if not __astron__: self.handler = self.handleWaitOnEnterResponses
self.handler = self.handleWaitOnEnterResponses
self.handlerArgs = {'hoodId': hoodId, self.handlerArgs = {'hoodId': hoodId,
'zoneId': zoneId, 'zoneId': zoneId,
'avId': avId} 'avId': avId}
@ -1627,50 +1575,33 @@ class OTPClientRepository(ClientRepositoryBase):
else: else:
self.gameFSM.request('playGame', [hoodId, zoneId, avId]) self.gameFSM.request('playGame', [hoodId, zoneId, avId])
if not __astron__: def handlePlayGame(self, msgType, di):
def handlePlayGame(self, msgType, di): if self.notify.getDebug():
if self.notify.getDebug(): self.notify.debug('handle play game got message type: ' + `msgType`)
self.notify.debug('handle play game got message type: ' + repr(msgType)) if msgType == CLIENT_CREATE_OBJECT_REQUIRED:
if msgType == CLIENT_CREATE_OBJECT_REQUIRED: self.handleGenerateWithRequired(di)
self.handleGenerateWithRequired(di) elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER: self.handleGenerateWithRequiredOther(di)
self.handleGenerateWithRequiredOther(di) elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
elif msgType == CLIENT_OBJECT_UPDATE_FIELD: self.handleUpdateField(di)
self.handleUpdateField(di) elif msgType == CLIENT_OBJECT_DISABLE_RESP:
elif msgType == CLIENT_OBJECT_DISABLE_RESP: self.handleDisable(di)
self.handleDisable(di) elif msgType == CLIENT_OBJECT_DELETE_RESP:
elif msgType == CLIENT_OBJECT_DELETE_RESP: self.handleDelete(di)
self.handleDelete(di) elif msgType == CLIENT_GET_FRIEND_LIST_RESP:
elif msgType == CLIENT_GET_FRIEND_LIST_RESP: self.handleGetFriendsList(di)
self.handleGetFriendsList(di) elif msgType == CLIENT_GET_FRIEND_LIST_EXTENDED_RESP:
elif msgType == CLIENT_GET_FRIEND_LIST_EXTENDED_RESP: self.handleGetFriendsListExtended(di)
self.handleGetFriendsListExtended(di) elif msgType == CLIENT_FRIEND_ONLINE:
elif msgType == CLIENT_FRIEND_ONLINE: self.handleFriendOnline(di)
self.handleFriendOnline(di) elif msgType == CLIENT_FRIEND_OFFLINE:
elif msgType == CLIENT_FRIEND_OFFLINE: self.handleFriendOffline(di)
self.handleFriendOffline(di) elif msgType == CLIENT_GET_AVATAR_DETAILS_RESP:
elif msgType == CLIENT_GET_AVATAR_DETAILS_RESP: self.handleGetAvatarDetailsResp(di)
self.handleGetAvatarDetailsResp(di) elif msgType == CLIENT_GET_PET_DETAILS_RESP:
elif msgType == CLIENT_GET_PET_DETAILS_RESP: self.handleGetAvatarDetailsResp(di)
self.handleGetAvatarDetailsResp(di) else:
else: self.handleMessageType(msgType, di)
self.handleMessageType(msgType, di)
else:
def handlePlayGame(self, msgType, di):
if self.notify.getDebug():
self.notify.debug('handle play game got message type: ' + repr(msgType))
if self.__recordObjectMessage(msgType, di):
return
if msgType == CLIENT_ENTER_OBJECT_REQUIRED:
self.handleGenerateWithRequired(di)
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED_OTHER:
self.handleGenerateWithRequired(di, other=True)
elif msgType == CLIENT_OBJECT_SET_FIELD:
self.handleUpdateField(di)
elif msgType == CLIENT_OBJECT_LEAVING:
self.handleDelete(di)
else:
self.handleMessageType(msgType, di)
@report(types=['args', 'deltaStamp'], dConfigParam='teleport') @report(types=['args', 'deltaStamp'], dConfigParam='teleport')
def enterSwitchShards(self, shardId, hoodId, zoneId, avId): def enterSwitchShards(self, shardId, hoodId, zoneId, avId):
@ -1935,84 +1866,48 @@ class OTPClientRepository(ClientRepositoryBase):
messenger.send('periodTimerExpired') messenger.send('periodTimerExpired')
return Task.done return Task.done
if not __astron__: def handleMessageType(self, msgType, di):
def handleMessageType(self, msgType, di): if msgType == CLIENT_GO_GET_LOST:
if msgType == CLIENT_GO_GET_LOST: self.handleGoGetLost(di)
self.handleGoGetLost(di) elif msgType == CLIENT_HEARTBEAT:
elif msgType == CLIENT_HEARTBEAT: self.handleServerHeartbeat(di)
self.handleServerHeartbeat(di) elif msgType == CLIENT_SYSTEM_MESSAGE:
elif msgType == CLIENT_SYSTEM_MESSAGE: self.handleSystemMessage(di)
self.handleSystemMessage(di) elif msgType == CLIENT_SYSTEMMESSAGE_AKNOWLEDGE:
elif msgType == CLIENT_SYSTEMMESSAGE_AKNOWLEDGE: self.handleSystemMessageAknowledge(di)
self.handleSystemMessageAknowledge(di) elif msgType == CLIENT_CREATE_OBJECT_REQUIRED:
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED: self.handleGenerateWithRequired(di)
self.handleGenerateWithRequired(di) elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER:
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER: self.handleGenerateWithRequiredOther(di)
self.handleGenerateWithRequiredOther(di) elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER:
elif msgType == CLIENT_CREATE_OBJECT_REQUIRED_OTHER_OWNER: self.handleGenerateWithRequiredOtherOwner(di)
self.handleGenerateWithRequiredOtherOwner(di) elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
elif msgType == CLIENT_OBJECT_UPDATE_FIELD: self.handleUpdateField(di)
self.handleUpdateField(di) elif msgType == CLIENT_OBJECT_DISABLE:
elif msgType == CLIENT_OBJECT_DISABLE: self.handleDisable(di)
self.handleDisable(di) elif msgType == CLIENT_OBJECT_DISABLE_OWNER:
elif msgType == CLIENT_OBJECT_DISABLE_OWNER: self.handleDisable(di, ownerView=True)
self.handleDisable(di, ownerView=True) elif msgType == CLIENT_OBJECT_DELETE_RESP:
elif msgType == CLIENT_OBJECT_DELETE_RESP: self.handleDelete(di)
self.handleDelete(di) elif msgType == CLIENT_DONE_INTEREST_RESP:
elif msgType == CLIENT_DONE_INTEREST_RESP: self.gotInterestDoneMessage(di)
self.gotInterestDoneMessage(di) elif msgType == CLIENT_GET_STATE_RESP:
elif msgType == CLIENT_GET_STATE_RESP: pass
pass elif msgType == CLIENT_OBJECT_LOCATION:
elif msgType == CLIENT_OBJECT_LOCATION: self.gotObjectLocationMessage(di)
self.gotObjectLocationMessage(di) elif msgType == CLIENT_SET_WISHNAME_RESP:
elif msgType == CLIENT_SET_WISHNAME_RESP: self.gotWishnameResponse(di)
self.gotWishnameResponse(di) else:
currentLoginState = self.loginFSM.getCurrentState()
if currentLoginState:
currentLoginStateName = currentLoginState.getName()
else: else:
currentLoginState = self.loginFSM.getCurrentState() currentLoginStateName = 'None'
if currentLoginState: currentGameState = self.gameFSM.getCurrentState()
currentLoginStateName = currentLoginState.getName() if currentGameState:
else: currentGameStateName = currentGameState.getName()
currentLoginStateName = 'None'
currentGameState = self.gameFSM.getCurrentState()
if currentGameState:
currentGameStateName = currentGameState.getName()
else:
currentGameStateName = 'None'
else:
def handleMessageType(self, msgType, di):
if self.__recordObjectMessage(msgType, di):
return
if msgType == CLIENT_EJECT:
self.handleGoGetLost(di)
elif msgType == CLIENT_HEARTBEAT:
self.handleServerHeartbeat(di)
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED:
self.handleGenerateWithRequired(di)
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED_OTHER:
self.handleGenerateWithRequired(di, other=True)
elif msgType == CLIENT_ENTER_OBJECT_REQUIRED_OTHER_OWNER:
self.handleGenerateWithRequiredOtherOwner(di)
elif msgType == CLIENT_OBJECT_SET_FIELD:
self.handleUpdateField(di)
elif msgType == CLIENT_OBJECT_LEAVING:
self.handleDisable(di)
elif msgType == CLIENT_OBJECT_LEAVING_OWNER:
self.handleDisable(di, ownerView=True)
elif msgType == CLIENT_DONE_INTEREST_RESP:
self.gotInterestDoneMessage(di)
elif msgType == CLIENT_OBJECT_LOCATION:
self.gotObjectLocationMessage(di)
else: else:
currentLoginState = self.loginFSM.getCurrentState() currentGameStateName = 'None'
if currentLoginState:
currentLoginStateName = currentLoginState.getName()
else:
currentLoginStateName = 'None'
currentGameState = self.gameFSM.getCurrentState()
if currentGameState:
currentGameStateName = currentGameState.getName()
else:
currentGameStateName = 'None'
def gotInterestDoneMessage(self, di): def gotInterestDoneMessage(self, di):
if self.deferredGenerates: if self.deferredGenerates:
@ -2020,23 +1915,6 @@ class OTPClientRepository(ClientRepositoryBase):
di = DatagramIterator(dg, di.getCurrentIndex()) di = DatagramIterator(dg, di.getCurrentIndex())
self.deferredGenerates.append((CLIENT_DONE_INTEREST_RESP, (dg, di))) self.deferredGenerates.append((CLIENT_DONE_INTEREST_RESP, (dg, di)))
else: else:
if __astron__:
# Play back generates, if necessary.
# First, create a new DatagramIterator using
# the Datagram from DatagramIterator di, and
# the current index of DatagramIterator di:
di2 = DatagramIterator(di.getDatagram(), di.getCurrentIndex())
# Get the context. This is never actually used,
# however none of this will work unless we get it.
ctx = di2.getUint32()
# Now, get the handle:
handle = di2.getUint16()
# Finally, play back the generates:
self.__playBackGenerates(handle)
self.handleInterestDoneMessage(di) self.handleInterestDoneMessage(di)
def gotObjectLocationMessage(self, di): def gotObjectLocationMessage(self, di):
@ -2174,241 +2052,81 @@ class OTPClientRepository(ClientRepositoryBase):
return True return True
return False return False
if not __astron__: def handleGenerateWithRequired(self, di):
def handleGenerateWithRequired(self, di): parentId = di.getUint32()
parentId = di.getUint32() zoneId = di.getUint32()
zoneId = di.getUint32() classId = di.getUint16()
classId = di.getUint16() doId = di.getUint32()
doId = di.getUint32() dclass = self.dclassesByNumber[classId]
dclass = self.dclassesByNumber[classId] if self._isInvalidPlayerAvatarGenerate(doId, dclass, parentId, zoneId):
if self._isInvalidPlayerAvatarGenerate(doId, dclass, parentId, zoneId): return
return dclass.startGenerate()
dclass.startGenerate() distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId) dclass.stopGenerate()
dclass.stopGenerate()
def handleGenerateWithRequiredOther(self, di): def handleGenerateWithRequiredOther(self, di):
parentId = di.getUint32() parentId = di.getUint32()
zoneId = di.getUint32() zoneId = di.getUint32()
classId = di.getUint16() classId = di.getUint16()
doId = di.getUint32() doId = di.getUint32()
dclass = self.dclassesByNumber[classId] dclass = self.dclassesByNumber[classId]
if self._isInvalidPlayerAvatarGenerate(doId, dclass, parentId, zoneId): if self._isInvalidPlayerAvatarGenerate(doId, dclass, parentId, zoneId):
return return
deferrable = getattr(dclass.getClassDef(), 'deferrable', False) deferrable = getattr(dclass.getClassDef(), 'deferrable', False)
if not self.deferInterval or self.noDefer: if not self.deferInterval or self.noDefer:
deferrable = False deferrable = False
now = globalClock.getFrameTime() now = globalClock.getFrameTime()
if self.deferredGenerates or deferrable: if self.deferredGenerates or deferrable:
if self.deferredGenerates or now - self.lastGenerate < self.deferInterval: if self.deferredGenerates or now - self.lastGenerate < self.deferInterval:
self.deferredGenerates.append((CLIENT_CREATE_OBJECT_REQUIRED_OTHER, doId)) self.deferredGenerates.append((CLIENT_CREATE_OBJECT_REQUIRED_OTHER, doId))
dg = Datagram(di.getDatagram()) dg = Datagram(di.getDatagram())
di = DatagramIterator(dg, di.getCurrentIndex()) di = DatagramIterator(dg, di.getCurrentIndex())
self.deferredDoIds[doId] = ((parentId, self.deferredDoIds[doId] = ((parentId,
zoneId, zoneId,
classId, classId,
doId, doId,
di), di),
deferrable, deferrable,
dg, dg,
[]) [])
if len(self.deferredGenerates) == 1: if len(self.deferredGenerates) == 1:
taskMgr.remove('deferredGenerate') taskMgr.remove('deferredGenerate')
taskMgr.doMethodLater(self.deferInterval, self.doDeferredGenerate, 'deferredGenerate') taskMgr.doMethodLater(self.deferInterval, self.doDeferredGenerate, 'deferredGenerate')
else:
self.lastGenerate = now
self.doGenerate(parentId, zoneId, classId, doId, di)
else: else:
self.lastGenerate = now
self.doGenerate(parentId, zoneId, classId, doId, di) self.doGenerate(parentId, zoneId, classId, doId, di)
else:
self.doGenerate(parentId, zoneId, classId, doId, di)
def handleGenerateWithRequiredOtherOwner(self, di): def handleGenerateWithRequiredOtherOwner(self, di):
classId = di.getUint16() classId = di.getUint16()
doId = di.getUint32() doId = di.getUint32()
parentId = di.getUint32() parentId = di.getUint32()
zoneId = di.getUint32() zoneId = di.getUint32()
dclass = self.dclassesByNumber[classId] dclass = self.dclassesByNumber[classId]
dclass.startGenerate() dclass.startGenerate()
distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di) distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di)
dclass.stopGenerate() dclass.stopGenerate()
def handleQuietZoneGenerateWithRequired(self, di): def handleQuietZoneGenerateWithRequired(self, di):
parentId = di.getUint32() parentId = di.getUint32()
zoneId = di.getUint32() zoneId = di.getUint32()
classId = di.getUint16() classId = di.getUint16()
doId = di.getUint32() doId = di.getUint32()
dclass = self.dclassesByNumber[classId] dclass = self.dclassesByNumber[classId]
dclass.startGenerate() dclass.startGenerate()
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId) distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
dclass.stopGenerate() dclass.stopGenerate()
def handleQuietZoneGenerateWithRequiredOther(self, di): def handleQuietZoneGenerateWithRequiredOther(self, di):
parentId = di.getUint32() parentId = di.getUint32()
zoneId = di.getUint32() zoneId = di.getUint32()
classId = di.getUint16() classId = di.getUint16()
doId = di.getUint32() doId = di.getUint32()
dclass = self.dclassesByNumber[classId] dclass = self.dclassesByNumber[classId]
dclass.startGenerate() dclass.startGenerate()
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId) distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
dclass.stopGenerate() dclass.stopGenerate()
else:
def handleGenerateWithRequired(self, di, other=False):
doId = di.getUint32()
parentId = di.getUint32()
zoneId = di.getUint32()
classId = di.getUint16()
# Determine whether or not we should add this generate
# to the pending generates, or just generate it right away.
for handle, interest in list(self._interests.items()):
if parentId != interest.parentId:
continue
if isinstance(interest.zoneIdList, list):
if zoneId not in interest.zoneIdList:
continue
else:
if zoneId != interest.zoneIdList:
continue
break
else:
self.notify.warning('Received generate for %d from %d:%d, which is not a part of any existing interests!' % (doId, parentId, zoneId))
interest = None
if not interest or not interest.events:
# Generate this object right away.
return self.__generateObject(doId, parentId, zoneId, classId, di, other)
# Wait on the interest events to complete before generating.
pending = self.__pendingGenerates.setdefault(handle, [])
pending.append((doId, parentId, zoneId, classId, Datagram(di.getDatagram()), other))
self.__doId2pendingInterest[doId] = handle
def __playBackGenerates(self, handle):
if handle not in self.__pendingGenerates:
# Nothing to play back!
return
# We will now play back this interest's pending generates.
# First, get a copy of the pending generates, and remove
# them from self.__pendingGenerates:
generates = self.__pendingGenerates[handle]
del self.__pendingGenerates[handle]
# Sort generates by classId:
generates.sort(key=lambda x: x[3])
# Generate the objects:
for doId, parentId, zoneId, classId, dg, other in generates:
# Set up a DatagramIterator using Datagram dg:
di = DatagramIterator(dg)
# Skip 16 bytes to move past the header.
# For the record: MsgType(2), zoneId, doId, parentId (3x4), classId (2)
di.skipBytes(16)
# Generate the object:
self.__generateObject(doId, parentId, zoneId, classId, di, other)
# Delete this object's doId from
# __doId2pendingInterest if it exists:
if doId in self.__doId2pendingInterest:
del self.__doId2pendingInterest[doId]
# Now that we have generated the object, if there
# are any messages to play back, do so now:
self.__playBackMessages(handle)
def __playBackMessages(self, handle):
if handle not in self.__pendingMessages:
# Nothing to play back!
return
# We will now play back any pending messages.
# First, loop through all the Datagram instances
# in __pendingMessages:
for dg in self.__pendingMessages[handle]:
# Set up a DatagramIterator using Datagram dg:
di = DatagramIterator(dg)
# Get the msgType:
msgType = di.getUint16()
# If self.handler is set, use that. Otherwise,
# use self.handleMessageType:
if self.handler:
self.handler(msgType, di)
else:
self.handleMessageType(msgType, di)
# We can now remove the handle from __pendingMessages:
del self.__pendingMessages[handle]
def __recordObjectMessage(self, msgType, di):
if msgType not in (CLIENT_OBJECT_SET_FIELD, CLIENT_OBJECT_LEAVING, CLIENT_OBJECT_LOCATION):
return False
di2 = DatagramIterator(di.getDatagram(), di.getCurrentIndex())
doId = di2.getUint32()
if doId not in self.__doId2pendingInterest:
return False
pending = self.__pendingMessages.setdefault(self.__doId2pendingInterest[doId], [])
pending.append(Datagram(di.getDatagram()))
return True
def __generateObject(self, doId, parentId, zoneId, classId, di, other):
# Get our dclass:
dclass = self.dclassesByNumber[classId]
# Is this an invalid player avatar generate?
if self._isInvalidPlayerAvatarGenerate(doId, dclass, parentId, zoneId):
# Yup, ignore this.
return
# Start the generation process:
dclass.startGenerate()
# Is this an other generate?
if other:
# Yup. In this case, we'll use generateWithRequiredOtherFields.
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
else:
# Nah. In this case, we'll use generateWithRequiredFields.
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
# We're done.
dclass.stopGenerate()
def handleGenerateWithRequiredOtherOwner(self, di):
doId = di.getUint32()
parentId = di.getUint32()
zoneId = di.getUint32()
classId = di.getUint16()
dclass = self.dclassesByNumber[classId]
dclass.startGenerate()
distObj = self.generateWithRequiredOtherFieldsOwner(dclass, doId, di)
dclass.stopGenerate()
def handleQuietZoneGenerateWithRequired(self, di):
doId = di.getUint32()
parentId = di.getUint32()
zoneId = di.getUint32()
classId = di.getUint16()
dclass = self.dclassesByNumber[classId]
dclass.startGenerate()
distObj = self.generateWithRequiredFields(dclass, doId, di, parentId, zoneId)
dclass.stopGenerate()
def handleQuietZoneGenerateWithRequiredOther(self, di):
doId = di.getUint32()
parentId = di.getUint32()
zoneId = di.getUint32()
classId = di.getUint16()
dclass = self.dclassesByNumber[classId]
dclass.startGenerate()
distObj = self.generateWithRequiredOtherFields(dclass, doId, di, parentId, zoneId)
dclass.stopGenerate()
def handleDisable(self, di, ownerView = False): def handleDisable(self, di, ownerView = False):
doId = di.getUint32() doId = di.getUint32()