added requestSave, backups made every N minutes

This commit is contained in:
Darren Ranalli 2003-10-11 03:40:00 +00:00
parent 1593885849
commit 98ecf0cd40
3 changed files with 29 additions and 5 deletions

View File

@ -18,7 +18,9 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI,
Level.Level.__init__(self)
# this is one of the required fields
self.zoneId = zoneId
self.modified = 0
if __debug__:
self.modified = 0
self.makeBackup = 1
def generate(self, levelSpec):
self.notify.debug('generate')
@ -58,6 +60,12 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI,
Level.Level.initializeLevel(self, self.doId, levelSpec, scenarioIndex)
if __debug__:
# listen for requests to save the spec
editMgrEntId = self.entType2ids['editMgr'][0]
editMgr = self.getEntity(editMgrEntId)
self.accept(editMgr.getSpecSaveEvent(), self.saveSpec)
def createEntityCreator(self):
"""Create the object that will be used to create Entities.
Inheritors, override if desired."""
@ -98,7 +106,8 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI,
self.modified = 1
self.scheduleSave()
SavePeriod = simbase.config.GetFloat('factory-save-period', 10)
SavePeriod = simbase.config.GetInt('factory-save-period', 10)
BackupPeriod = simbase.config.GetInt('factory-backup-period-minutes',5)
def scheduleSave(self):
if hasattr(self, 'saveTask'):
@ -112,9 +121,18 @@ class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI,
DistributedLevelAI.notify.info('saving spec')
if hasattr(self, 'saveTask'):
del self.saveTask
if self.modified:
self.levelSpec.saveToDisk()
self.modified = 0
if not self.modified:
DistributedLevelAI.notify.info('no changes to save')
return
self.levelSpec.saveToDisk(createBackup=self.makeBackup)
self.modified = 0
self.makeBackup = 0
def setMakeBackup(task, self=self):
self.makeBackup = 1
self.backupTask = taskMgr.doMethodLater(
DistributedLevelAI.BackupPeriod * 60,
setMakeBackup,
self.uniqueName('setMakeBackup'))
def requestCurrentLevelSpec(self, specHash, entTypeRegHash):
senderId = self.air.msgSender

View File

@ -20,3 +20,8 @@ class EditMgr(Entity.Entity):
def setRemoveEntity(self, data):
self.level.levelSpec.removeEntity(data['entId'],
)
def getSpecSaveEvent(self):
return 'requestSave-%s' % self.level.levelId
def setRequestSave(self, data):
messenger.send(self.getSpecSaveEvent())

View File

@ -34,6 +34,7 @@ class LevelMgr(Entity):
class EditMgr(Entity):
type = 'editMgr'
attribs = (
('requestSave', None),
('insertEntity', None),
('removeEntity', None),
)