uberdog: Starts
This commit is contained in:
parent
bf9cb79078
commit
13e7bf0b61
|
|
@ -0,0 +1,380 @@
|
|||
"""
|
||||
The Uber Distributed Obeject Globals server.
|
||||
"""
|
||||
|
||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||
from direct.fsm.ClassicFSM import ClassicFSM
|
||||
from direct.fsm.State import State
|
||||
from otp.otpbase import OTPGlobals
|
||||
from otp.distributed import OtpDoGlobals
|
||||
from otp.distributed.OtpDoGlobals import *
|
||||
from otp.ai.AIRepository import AIRepository
|
||||
from otp.ai import TimeManagerAI
|
||||
from pandac.PandaModules import *
|
||||
from otp.uberdog.AccountDetailRecord import AccountDetailRecord, SubDetailRecord
|
||||
|
||||
from otp.ai.AIMsgTypes import *
|
||||
|
||||
|
||||
class UberDog(AIRepository):
|
||||
notify = directNotify.newCategory("UberDog")
|
||||
|
||||
def __init__(
|
||||
self, mdip, mdport, esip, esport, dcFileNames,
|
||||
serverId, minChannel, maxChannel):
|
||||
AIRepository.__init__(
|
||||
self, mdip, mdport, esip, esport, dcFileNames,
|
||||
serverId, minChannel, maxChannel, dcSuffix = 'UD')
|
||||
|
||||
# We're responsible for keeping track of who's online with which avatar
|
||||
self.onlineAccountDetails = {}
|
||||
self.onlineAvatars = {}
|
||||
self.onlinePlayers = {}
|
||||
|
||||
self.pending={}
|
||||
self.doId2doCache={}
|
||||
|
||||
if hasattr(self, 'setVerbose'):
|
||||
if self.config.GetBool('verbose-uberrepository'):
|
||||
self.setVerbose(1)
|
||||
|
||||
# The AI State machine
|
||||
self.fsm = ClassicFSM(
|
||||
'UberDog', [
|
||||
State('off',
|
||||
self.enterOff,
|
||||
self.exitOff,
|
||||
['connect']),
|
||||
State('connect',
|
||||
self.enterConnect,
|
||||
self.exitConnect,
|
||||
['noConnection', 'playGame',]),
|
||||
State('playGame',
|
||||
self.enterPlayGame,
|
||||
self.exitPlayGame,
|
||||
['noConnection']),
|
||||
State('noConnection',
|
||||
self.enterNoConnection,
|
||||
self.exitNoConnection,
|
||||
['connect'])],
|
||||
# initial state
|
||||
'off',
|
||||
# final state
|
||||
'off',
|
||||
)
|
||||
self.fsm.enterInitialState()
|
||||
self.fsm.request("connect")
|
||||
|
||||
def _connected(self):
|
||||
"""
|
||||
Callback for when we successfully connect to the otp_server cluster.
|
||||
"""
|
||||
self.setConnectionName("UberDog")
|
||||
AIRepository._connected(self)
|
||||
# Listen for Account and Avatar online/offline messages
|
||||
self.registerForChannel(CHANNEL_PUPPET_ACTION)
|
||||
self.fsm.request("playGame")
|
||||
|
||||
def dispatchUpdateToDoId(self, dclassName, fieldName, doId, args, channelId=None):
|
||||
# dispatch immediately to local object if it's local, otherwise send
|
||||
# it over the wire
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
assert obj.__class__.__name__ == (dclassName + self.dcSuffix)
|
||||
method = getattr(obj, fieldName)
|
||||
apply(method, args)
|
||||
else:
|
||||
self.sendUpdateToDoId(dclassName, fieldName, doId, args, channelId)
|
||||
|
||||
def dispatchUpdateToGlobalDoId(self, dclassName, fieldName, doId, args):
|
||||
# dispatch immediately to local object if it's local, otherwise send
|
||||
# it over the wire
|
||||
obj = self.doId2do.get(doId)
|
||||
if obj is not None:
|
||||
assert obj.__class__.__name__ == dclassName
|
||||
method = getattr(obj, fieldName)
|
||||
apply(method, args)
|
||||
else:
|
||||
self.sendUpdateToGlobalDoId(dclassName, fieldName, doId, args)
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def handleAccountUsage(self, di):
|
||||
priorAccount = di.getUint32() # Historic - used only in __dev__ atm
|
||||
newAccount = di.getUint32()
|
||||
|
||||
if priorAccount == 0 and newAccount == 0:
|
||||
assert self.notify.debug("priorAccount==0 and newAccount==0, ignoring accountUsage message")
|
||||
return
|
||||
|
||||
accountDetailRecord = AccountDetailRecord()
|
||||
accountDetailRecord.openChatEnabled = (di.getString() == "YES")
|
||||
accountDetailRecord.createFriendsWithChat = (di.getString() == "YES")
|
||||
accountDetailRecord.chatCodeCreation = (di.getString() == "YES")
|
||||
access = di.getString()
|
||||
if access == "VELVET":
|
||||
access = OTPGlobals.AccessVelvetRope
|
||||
elif access == "FULL":
|
||||
access = OTPGlobals.AccessFull
|
||||
else:
|
||||
access = OTPGlobals.AccessUnknown
|
||||
accountDetailRecord.piratesAccess = access
|
||||
accountDetailRecord.familyAccountId = di.getInt32()
|
||||
accountDetailRecord.playerAccountId = di.getInt32()
|
||||
accountDetailRecord.playerName = di.getString()
|
||||
accountDetailRecord.playerNameApproved = di.getInt8()
|
||||
accountDetailRecord.maxAvatars = di.getInt32()
|
||||
accountDetailRecord.numFamilyMembers = di.getInt16()
|
||||
accountDetailRecord.familyMembers = []
|
||||
for i in range(accountDetailRecord.numFamilyMembers):
|
||||
accountDetailRecord.familyMembers.append(di.getInt32())
|
||||
|
||||
logoutReason = di.getInt32()
|
||||
|
||||
# Now retrieve the subscription information
|
||||
accountDetailRecord.numSubs = di.getUint16()
|
||||
|
||||
for i in range(accountDetailRecord.numSubs):
|
||||
subDetailRecord = SubDetailRecord()
|
||||
subDetailRecord.subId = di.getUint32()
|
||||
subDetailRecord.subOwnerId = di.getUint32()
|
||||
subDetailRecord.subName = di.getString()
|
||||
subDetailRecord.subActive = di.getString()
|
||||
access = di.getString()
|
||||
if access == "VELVET":
|
||||
access = OTPGlobals.AccessVelvetRope
|
||||
elif access == "FULL":
|
||||
access = OTPGlobals.AccessFull
|
||||
else:
|
||||
access = OTPGlobals.AccessUnknown
|
||||
subDetailRecord.subAccess = access
|
||||
subDetailRecord.subLevel = di.getUint8()
|
||||
subDetailRecord.subNumAvatars = di.getUint8()
|
||||
subDetailRecord.subNumConcur = di.getUint8()
|
||||
subDetailRecord.subFounder = (di.getString() == "YES")
|
||||
# Add this subscription to the dict on the account record
|
||||
accountDetailRecord.subDetails[subDetailRecord.subId] = subDetailRecord
|
||||
|
||||
# How many avatar slots total do you get in this game?
|
||||
accountDetailRecord.maxAvatarSlots = di.getInt8()
|
||||
|
||||
assert self.notify.debug("accountDetailRecord: %s" % accountDetailRecord)
|
||||
|
||||
if priorAccount:
|
||||
# Send any previous account offline
|
||||
self.accountOffline(priorAccount)
|
||||
pass
|
||||
|
||||
if newAccount:
|
||||
# Set up the new guy
|
||||
self.accountOnline(newAccount, accountDetailRecord)
|
||||
pass
|
||||
pass
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def handleAvatarUsage(self, di):
|
||||
priorAvatar = di.getUint32()
|
||||
newAvatar = di.getUint32()
|
||||
|
||||
if priorAvatar == 0 and newAvatar == 0:
|
||||
assert self.notify.debug("priorAvatar==0 and newAvatar==0, ignoring avatarUsage message")
|
||||
return
|
||||
|
||||
newAvatarType = di.getUint16()
|
||||
|
||||
accountId = di.getUint32()
|
||||
|
||||
openChatEnabled = di.getString()
|
||||
createFriendsWithChat = di.getString()
|
||||
chatCodeCreation = di.getString()
|
||||
piratesAccess = di.getString()
|
||||
familyAccountId = di.getInt32()
|
||||
playerAccountId = di.getInt32()
|
||||
playerName = di.getString()
|
||||
playerNameApproved = di.getInt8()
|
||||
maxAvatars = di.getInt32()
|
||||
numFamilyMembers = di.getInt16()
|
||||
familyMembers = []
|
||||
for i in range(numFamilyMembers):
|
||||
familyMembers.append(di.getInt32())
|
||||
|
||||
if openChatEnabled == "YES":
|
||||
openChatEnabled = 1
|
||||
else:
|
||||
openChatEnabled = 0
|
||||
|
||||
if priorAvatar:
|
||||
# Send any previous avatar offline
|
||||
self.avatarOffline(accountId, priorAvatar)
|
||||
pass
|
||||
|
||||
if newAvatar:
|
||||
# Set up the new guy
|
||||
self.avatarOnline(newAvatar, newAvatarType,
|
||||
playerAccountId,
|
||||
playerName,
|
||||
playerNameApproved,
|
||||
openChatEnabled,
|
||||
createFriendsWithChat,
|
||||
chatCodeCreation)
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def accountOnline(self, accountId, accountDetailRecord):
|
||||
self.writeServerEvent('accountOnline', accountId, '')
|
||||
self.onlineAccountDetails[accountId] = accountDetailRecord
|
||||
messenger.send('accountOnline', [accountId])
|
||||
pass
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def accountOffline(self, accountId):
|
||||
self.writeServerEvent('accountOffline', accountId, '')
|
||||
self.onlineAccountDetails.pop(accountId, None)
|
||||
self.onlinePlayers.pop(accountId, None)
|
||||
messenger.send('accountOffline', [accountId])
|
||||
pass
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def getAccountDetails(self, accountId):
|
||||
return self.onlineAccountDetails.get(accountId)
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def isAccountOnline(self, accountId):
|
||||
return accountId in self.onlineAccountDetails
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def isAvatarOnline(self, avatarId):
|
||||
return avatarId in self.onlineAvatars
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def getAvatarAccountOnline(self, avatarId):
|
||||
return self.onlineAvatars.get(avatarId, 0)
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def getAccountOnlineAvatar(self, accountId):
|
||||
return self.onlinePlayers.get(accountId, 0)
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def checkAccountId(self, accountId):
|
||||
if not accountId:
|
||||
# SUSPICIOUS
|
||||
self.notify.warning("Bogus accountId: %s" % accountId)
|
||||
self.writeServerEvent('suspicious', accountId, 'bogus accountId in OtpAvatarManagerUD')
|
||||
elif not self.isAccountOnline(accountId):
|
||||
# SUSPICIOUS
|
||||
self.notify.warning("Got request from account not online: %s" % accountId)
|
||||
self.writeServerEvent('suspicious', accountId, 'request from offline account in OtpAvatarManagerUD')
|
||||
else:
|
||||
# Everything checks out
|
||||
return True
|
||||
return False
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def avatarOnline(self, avatarId, avatarType, accountId, playerName, playerNameApproved,
|
||||
openChatEnabled, createFriendsWithChat, chatCodeCreation):
|
||||
self.writeServerEvent('avatarOnline', avatarId, '%s|%s|%s|%s|%s|%s' % (
|
||||
accountId, playerName, playerNameApproved, openChatEnabled,
|
||||
createFriendsWithChat, chatCodeCreation))
|
||||
|
||||
self.onlineAvatars[avatarId] = accountId
|
||||
self.onlinePlayers[accountId] = avatarId
|
||||
|
||||
simpleInfo = [avatarId, avatarType]
|
||||
fullInfo = [avatarId,
|
||||
accountId,
|
||||
playerName,
|
||||
playerNameApproved,
|
||||
openChatEnabled,
|
||||
createFriendsWithChat,
|
||||
chatCodeCreation]
|
||||
|
||||
# necessary for local UD manager objects
|
||||
messenger.send("avatarOnline", simpleInfo)
|
||||
messenger.send("avatarOnlinePlusAccountInfo", fullInfo)
|
||||
pass
|
||||
|
||||
@report(types = ['args'], dConfigParam = 'avatarmgr')
|
||||
def avatarOffline(self, accountId, avatarId):
|
||||
self.writeServerEvent('avatarOffline', avatarId, '')
|
||||
|
||||
self.onlinePlayers.pop(accountId, None)
|
||||
self.onlineAvatars.pop(avatarId, None)
|
||||
|
||||
# necessary for local UD manager objects
|
||||
messenger.send("avatarOffline", [avatarId])
|
||||
pass
|
||||
|
||||
###################################
|
||||
# Assumed Obsolete as of 6/29/09
|
||||
#
|
||||
# If you're reading this and there
|
||||
# haven't been any strange UD crashes
|
||||
# here lately, you can probably delete
|
||||
# the next few functions.
|
||||
###################################
|
||||
def _addObject(self, context, distributedObject):
|
||||
"""
|
||||
Handle a new distributed object arriving by adding
|
||||
it to the cache calling self.handleGotDo().
|
||||
"""
|
||||
assert False, 'JCW: Testing for obsolete functions. If this crashes, let Josh know'
|
||||
doId=distributedObject.getDoId()
|
||||
assert not self.doId2doCache.has_key(doId)
|
||||
if not self.doId2doCache.has_key(doId):
|
||||
self.doId2doCache[doId]=distributedObject
|
||||
self.handleGotDo(distributedObject)
|
||||
|
||||
def handleGotDo(self, distributedObject):
|
||||
"""
|
||||
This allows derived classes to override the handling
|
||||
of new distributed objects arriving in the cache.
|
||||
By default, this will loop through the pending calls
|
||||
for that object and make the function calls. It
|
||||
will also remove the handled calls from the pending set.
|
||||
"""
|
||||
assert False, 'JCW: Testing for obsolete functions. If this crashes, let Josh know'
|
||||
assert self.doId2doCache.has_key(doId)
|
||||
pending=self.pending.get(doId)
|
||||
if pending is not None:
|
||||
del self.pending[doId]
|
||||
for i in pending:
|
||||
apply(i[0], i[2])
|
||||
|
||||
def deleteObject(self, doId):
|
||||
"""
|
||||
Ask for the object to be removed from the private
|
||||
distributed object cache.
|
||||
"""
|
||||
assert False, 'JCW: Testing for obsolete functions. If this crashes, let Josh know'
|
||||
if self.doId2doCache.had_key(doId):
|
||||
self.unregisterForChannel(doId)
|
||||
#self.deleteObject(doId)
|
||||
del self.doId2doCache[doId]
|
||||
#HACK:
|
||||
self.unregisterForChannel(doId)
|
||||
AIRepository.deleteObject(self.doId)
|
||||
|
||||
def uniqueName(self, desc):
|
||||
return desc
|
||||
|
||||
if __dev__:
|
||||
"""
|
||||
Early warning system for unsupported use of the Uberdog Repository
|
||||
"""
|
||||
def deleteObjects(self):
|
||||
assert 0
|
||||
|
||||
def createDistrict(self, districtId, districtName):
|
||||
assert 0
|
||||
|
||||
def deleteDistrict(self, districtId):
|
||||
assert 0
|
||||
|
||||
def enterDistrictReset(self):
|
||||
assert 0
|
||||
|
||||
def exitDistrictReset(self):
|
||||
assert 0
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
"""instantiate global ShowBase object"""
|
||||
|
||||
from otp.ai.AIBase import *
|
||||
|
||||
# We're going to end up importing this accidentally anyway, so we
|
||||
# might as well import it explicitly, and share the same AIBase
|
||||
# object.
|
||||
from otp.ai.AIBaseGlobal import *
|
||||
|
||||
__builtins__["uber"] = simbase
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
from toontown.toonbase import TTLocalizer
|
||||
|
||||
language = TTLocalizer.getLanguage()
|
||||
|
||||
# Log config
|
||||
|
||||
logFatal = True
|
||||
logError = True
|
||||
logWarning = True
|
||||
logLog = True
|
||||
logInfo = True
|
||||
logDebug = False
|
||||
logChat = True
|
||||
logSecurity = True
|
||||
logMaxLinesInMemory = 100
|
||||
|
||||
# DB config
|
||||
ttDbHost = "localhost"
|
||||
ttDbPort = 3306
|
||||
|
||||
if language == 'castillian':
|
||||
ttDbName = "es_toontownTopDb"
|
||||
elif language == "japanese":
|
||||
ttDbName = "jp_toontownTopDb"
|
||||
elif language == "portuguese":
|
||||
ttDbName = "br_toontownTopDb"
|
||||
elif language == "french":
|
||||
ttDbName = "french_toontownTopDb"
|
||||
else:
|
||||
ttDbName = "toontownTopDb"
|
||||
|
||||
ttDbUser = "ttDb_user"
|
||||
ttDbPasswd = "toontastic2008"
|
||||
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
"""
|
||||
Start the Toontown UberDog (Uber Distributed Object Globals server).
|
||||
"""
|
||||
|
||||
from panda3d.core import loadPrcFile
|
||||
|
||||
# TODO: use argparse for this?
|
||||
configs = ('etc/Configrc.prc',)
|
||||
for prc in configs:
|
||||
loadPrcFile(prc)
|
||||
|
||||
import builtins
|
||||
from direct.task.Task import Task
|
||||
|
||||
class game:
|
||||
name = "uberDog"
|
||||
process = "server"
|
||||
builtins.game = game()
|
||||
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
|
||||
if os.getenv('TTMODELS'):
|
||||
from pandac.PandaModules import getModelPath, Filename
|
||||
# In the publish environment, TTMODELS won't be on the model
|
||||
# path by default, so we always add it there. In the dev
|
||||
# environment, it'll be on the model path already, but it
|
||||
# doesn't hurt to add it again.
|
||||
getModelPath().appendDirectory(Filename.expandFrom("$TTMODELS/built"))
|
||||
|
||||
from direct.showbase.PythonUtil import *
|
||||
from otp.uberdog.UberDogGlobal import *
|
||||
from toontown.coderedemption import TTCodeRedemptionConsts
|
||||
from toontown.uberdog.ToontownUberDog import ToontownUberDog
|
||||
from toontown.uberdog import PartiesUdConfig
|
||||
|
||||
print("Initializing the Toontown UberDog (Uber Distributed Object Globals server)...")
|
||||
|
||||
uber.mdip = uber.config.GetString("msg-director-ip", "127.0.0.1")
|
||||
uber.mdport = uber.config.GetInt("msg-director-port", 6666)
|
||||
|
||||
uber.esip = uber.config.GetString("event-server-ip", "127.0.0.1")
|
||||
uber.esport = uber.config.GetInt("event-server-port", 4343)
|
||||
|
||||
stateServerId = uber.config.GetInt("state-server-id", 20100000)
|
||||
|
||||
uber.objectNames = set(os.getenv("uberdog_objects", "").split())
|
||||
|
||||
minChannel = uber.config.GetInt("uberdog-min-channel", 200400000)
|
||||
maxChannel = uber.config.GetInt("uberdog-max-channel", 200449999)
|
||||
|
||||
uber.sbNSHost = uber.config.GetString("sb-host","")
|
||||
uber.sbNSPort = uber.config.GetInt("sb-port",6053)
|
||||
uber.sbListenPort = 6060
|
||||
uber.clHost = "127.0.0.1"
|
||||
uber.clPort = 9090
|
||||
uber.allowUnfilteredChat = uber.config.GetInt("allow-unfiltered-chat",0)
|
||||
uber.bwDictPath = ""
|
||||
|
||||
uber.RATManagerHTTPListenPort = uber.config.GetInt("rat-port",8080)
|
||||
uber.awardManagerHTTPListenPort = uber.config.GetInt("award-port",8888)
|
||||
uber.inGameNewsMgrHTTPListenPort = uber.config.GetInt("in-game-news-port",8889)
|
||||
uber.mysqlhost = uber.config.GetString("mysql-host", PartiesUdConfig.ttDbHost)
|
||||
|
||||
|
||||
uber.codeRedemptionMgrHTTPListenPort = uber.config.GetInt('code-redemption-port', 8998)
|
||||
uber.crDbName = uber.config.GetString("tt-code-db-name", TTCodeRedemptionConsts.DefaultDbName)
|
||||
|
||||
uber.cpuInfoMgrHTTPListenPort = uber.config.GetInt("security_ban_mgr_port",8892)
|
||||
|
||||
uber.air = ToontownUberDog(
|
||||
uber.mdip, uber.mdport,
|
||||
uber.esip, uber.esport,
|
||||
None,
|
||||
stateServerId,
|
||||
minChannel,
|
||||
maxChannel)
|
||||
|
||||
# How we let the world know we are not running a service
|
||||
uber.aiService = 0
|
||||
|
||||
uber.wantEmbeddedOtpServer = uber.config.GetInt(
|
||||
"toontown-uberdog-want-embedded-otp-server", 0)
|
||||
if uber.wantEmbeddedOtpServer:
|
||||
otpServerPath = uber.config.GetString(
|
||||
"toontown-uberdog-otp-server-path", "c:/toonsrv")
|
||||
sys.path.append(otpServerPath)
|
||||
|
||||
import otp_server_py
|
||||
if not otp_server_py.serverInit(otpServerPath):
|
||||
sys.exit(1)
|
||||
|
||||
def ServerYield(task):
|
||||
otp_server_py.serverLoop()
|
||||
return Task.cont
|
||||
|
||||
uber.taskMgr.add(ServerYield, 'serverYield')
|
||||
__builtins__["otpServer"] = otp_server_py
|
||||
|
||||
|
||||
try:
|
||||
run()
|
||||
except:
|
||||
info = describeException()
|
||||
#uber.air.writeServerEvent('uberdog-exception', districtNumber, info)
|
||||
raise
|
||||
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
"""
|
||||
The Toontown Uber Distributed Object Globals server.
|
||||
"""
|
||||
|
||||
from pandac.PandaModules import *
|
||||
import time
|
||||
if __debug__:
|
||||
from direct.showbase.PythonUtil import *
|
||||
|
||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||
|
||||
from otp.distributed import OtpDoGlobals
|
||||
from otp.ai.AIMsgTypes import *
|
||||
from otp.ai import TimeManagerAI
|
||||
from otp.uberdog.UberDog import UberDog
|
||||
|
||||
from otp.friends.AvatarFriendsManagerUD import AvatarFriendsManagerUD
|
||||
from toontown.uberdog.DistributedDeliveryManagerUD import DistributedDeliveryManagerUD
|
||||
from toontown.uberdog.DistributedMailManagerUD import DistributedMailManagerUD
|
||||
from toontown.parties import ToontownTimeManager
|
||||
from toontown.rpc.RATManagerUD import RATManagerUD
|
||||
from toontown.rpc.AwardManagerUD import AwardManagerUD
|
||||
from toontown.uberdog import TTSpeedchatRelayUD
|
||||
from toontown.uberdog import DistributedInGameNewsMgrUD
|
||||
from toontown.uberdog import DistributedCpuInfoMgrUD
|
||||
|
||||
from otp.uberdog.RejectCode import RejectCode
|
||||
|
||||
class ToontownUberDog(UberDog):
|
||||
notify = directNotify.newCategory("UberDog")
|
||||
|
||||
def __init__(
|
||||
self, mdip, mdport, esip, esport, dcFilenames,
|
||||
serverId, minChannel, maxChannel):
|
||||
assert self.notify.debugStateCall(self)
|
||||
# TODO: The UD needs to know server time, but perhaps this isn't
|
||||
# the place to do this? -SG-SLWP
|
||||
self.toontownTimeManager = ToontownTimeManager.ToontownTimeManager()
|
||||
self.toontownTimeManager.updateLoginTimes(time.time(), time.time(), globalClock.getRealTime())
|
||||
|
||||
def isManagerFor(name):
|
||||
return len(uber.objectNames) == 0 or name in uber.objectNames
|
||||
self.isFriendsManager = False # latest from Ian this should not run anymore
|
||||
#self.isFriendsManager = isManagerFor('friends')
|
||||
self.isSpeedchatRelay = isManagerFor('speedchatRelay')
|
||||
self.isGiftingManager = isManagerFor('gifting')
|
||||
self.isMailManager = False # isManagerFor('mail')
|
||||
self.isPartyManager = isManagerFor('party')
|
||||
self.isRATManager = False # isManagerFor('RAT')
|
||||
self.isAwardManager = isManagerFor('award')
|
||||
self.isCodeRedemptionManager = isManagerFor('coderedemption')
|
||||
self.isInGameNewsMgr = isManagerFor('ingamenews')
|
||||
self.isCpuInfoMgr = isManagerFor('cpuinfo')
|
||||
self.isRandomSourceManager = False # isManagerFor('randomsource')
|
||||
|
||||
UberDog.__init__(
|
||||
self, mdip, mdport, esip, esport, dcFilenames,
|
||||
serverId, minChannel, maxChannel)
|
||||
|
||||
def createObjects(self):
|
||||
UberDog.createObjects(self)
|
||||
# Ask for the ObjectServer so we can check the dc hash value
|
||||
self.queryObjectAll(self.serverId)
|
||||
|
||||
if self.isFriendsManager:
|
||||
self.playerFriendsManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_PLAYER_FRIENDS_MANAGER,
|
||||
"TTPlayerFriendsManager")
|
||||
|
||||
if self.isSpeedchatRelay:
|
||||
self.speedchatRelay = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_SPEEDCHAT_RELAY,
|
||||
"TTSpeedchatRelay")
|
||||
|
||||
if self.isGiftingManager:
|
||||
self.deliveryManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_DELIVERY_MANAGER,
|
||||
"DistributedDeliveryManager")
|
||||
|
||||
if self.isMailManager:
|
||||
self.mailManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_MAIL_MANAGER,
|
||||
"DistributedMailManager")
|
||||
|
||||
if self.isPartyManager:
|
||||
self.partyManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_PARTY_MANAGER,
|
||||
"DistributedPartyManager")
|
||||
|
||||
if simbase.config.GetBool('want-ddsm', 1):
|
||||
self.dataStoreManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_TEMP_STORE_MANAGER,
|
||||
"DistributedDataStoreManager")
|
||||
|
||||
if self.isRATManager:
|
||||
self.RATManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_RAT_MANAGER,
|
||||
"RATManager")
|
||||
|
||||
if self.isAwardManager:
|
||||
self.awardManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_AWARD_MANAGER,
|
||||
"AwardManager")
|
||||
|
||||
if config.GetBool('want-code-redemption', 1):
|
||||
if self.isCodeRedemptionManager:
|
||||
self.codeRedemptionManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_CODE_REDEMPTION_MANAGER,
|
||||
"TTCodeRedemptionMgr")
|
||||
|
||||
if self.isInGameNewsMgr:
|
||||
self.inGameNewsMgr = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_IN_GAME_NEWS_MANAGER,
|
||||
"DistributedInGameNewsMgr")
|
||||
|
||||
if self.isCpuInfoMgr:
|
||||
self.cpuInfoMgr = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER,
|
||||
"DistributedCpuInfoMgr")
|
||||
|
||||
if self.isRandomSourceManager:
|
||||
self.randomSourceManager = self.generateGlobalObject(
|
||||
OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE,
|
||||
"NonRepeatableRandomSource")
|
||||
|
||||
def getDatabaseIdForClassName(self, className):
|
||||
return DatabaseIdFromClassName.get(
|
||||
className, DefaultDatabaseChannelId)
|
||||
|
||||
if __debug__:
|
||||
def status(self):
|
||||
if self.isGiftingManager:
|
||||
print("deliveryManager is", self.deliveryManager)
|
||||
if self.isFriendsManager:
|
||||
print("playerFriendsManager is ",self.playerFriendsManager)
|
||||
|
||||
Loading…
Reference in New Issue