93 lines
3.8 KiB
Python
93 lines
3.8 KiB
Python
import socket
|
|
import datetime
|
|
import os
|
|
from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal
|
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
from otp.distributed import OtpDoGlobals
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.uberdog import InGameNewsResponses
|
|
|
|
ParentClass = DistributedObjectAI
|
|
#ParentClass = DistributedObjectGlobal
|
|
class DistributedCpuInfoMgrAI(ParentClass ):
|
|
"""
|
|
Uberdog object that keeps track of the last time in game news has been updated
|
|
"""
|
|
notify = directNotify.newCategory('DistributedInGameNewsMgrAI')
|
|
|
|
|
|
def __init__(self, cr):
|
|
"""Construct ourselves, set up web dispatcher."""
|
|
assert self.notify.debugCall()
|
|
ParentClass.__init__(self, cr)
|
|
self.latestIssueStr = ""
|
|
self.avId2Fingerprint = {}
|
|
self.accept("avatarEntered", self.handleAvatarEntered)
|
|
|
|
def generate(self):
|
|
"""We have zone info but not required fields, register for the special."""
|
|
# IN_GAME_NEWS_MGR_UD_TO_ALL_AI will arrive on this channel
|
|
self.air.registerForChannel(OtpDoGlobals.OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER)
|
|
ParentClass.generate(self)
|
|
|
|
def announceGenerate(self):
|
|
# tell uberdog we are starting up, so we can get info on the currently running public parties
|
|
# do whatever other sanity checks is necessary here
|
|
DistributedObjectAI.announceGenerate(self)
|
|
#self.air.sendUpdateToDoId("DistributedInGameNewsMgr",
|
|
# 'inGameNewsMgrAIStartingUp',
|
|
# OtpDoGlobals.OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER,
|
|
# [self.doId, self.air.districtId]
|
|
#)
|
|
def setLatestIssueStr(self, issueStr):
|
|
"""We normally get this once, we could get this when a new issue is released while logged in."""
|
|
# we receive this as a utc str
|
|
assert self.notify.debugStateCall(self)
|
|
self.latestIssueStr = issueStr
|
|
pass
|
|
|
|
def b_setLatestIssueStr(self, latestIssue):
|
|
self.setLatestIssueStr(latestIssue)
|
|
self.d_setLatestIssueStr(latestIssue)
|
|
|
|
def d_setLatestIssueStr(self, latestIssue):
|
|
self.sendUpdate("setLatestIssueStr",[self.getLatestIssueStr()])
|
|
|
|
|
|
def getLatestIssueStr(self):
|
|
"""We normally get this once, we could get this when a new issue is released while logged in."""
|
|
assert self.notify.debugStateCall(self)
|
|
return self.latestIssueStr
|
|
pass
|
|
|
|
|
|
def newIssueUDtoAI(self, issueStr):
|
|
"""Well the UD is telling us we have a new issue, spread it to the clients."""
|
|
self.b_setLatestIssueStr(issueStr)
|
|
|
|
def sendCpuInfoToUd(self, info, fingerprint):
|
|
"""Prepare to send the info to the UD, we don't have the DISLid yet."""
|
|
requesterId = self.air.getAvatarIdFromSender()
|
|
self.avId2Fingerprint[requesterId] = (info,fingerprint)
|
|
|
|
def handleAvatarEntered(self, avatar):
|
|
"""Send the cpu info to the UD once we get the avatar and the DISL id."""
|
|
if avatar.doId in self.avId2Fingerprint:
|
|
info, fingerprint = self.avId2Fingerprint.get(avatar.doId)
|
|
dislId = 0
|
|
if avatar:
|
|
try:
|
|
dislId = avatar.DISLid
|
|
except:
|
|
pass
|
|
if dislId:
|
|
self.air.sendUpdateToDoId("DistributedCpuInfoMgr",
|
|
'setCpuInfoToUd',
|
|
OtpDoGlobals.OTP_DO_ID_TOONTOWN_CPU_INFO_MANAGER,
|
|
[avatar.doId, dislId, info[:255],fingerprint[:255]]
|
|
)
|
|
else:
|
|
self.notify.warning("avId=%s has dislId=%s" % (avatar.doId, dislId))
|
|
del self.avId2Fingerprint[avatar.doId]
|
|
|