Poodletooth-iLand/toontown/ai/ServerEventBuffer.py
2015-03-03 17:10:12 -05:00

75 lines
1.9 KiB
Python

class ServerEventBuffer:
def __init__(self, air, name, avId, period = None):
self.air = air
self.name = name
self.avId = avId
if period is None:
period = 6 * 60.0
self.period = period
self.lastFlushTime = None
return
def destroy(self):
self.flush()
def flush(self):
self.lastFlushTime = None
return
def writeEvent(self, msg):
self.air.writeServerEvent(self.name, self.avId, msg)
def considerFlush(self):
if self.lastFlushTime is None:
self.lastFlushTime = globalClock.getFrameTime()
elif globalClock.getFrameTime() - self.lastFlushTime > self.period * 60.0:
self.flush()
return
class ServerEventAccumulator(ServerEventBuffer):
def __init__(self, air, name, avId, period = None):
ServerEventBuffer.__init__(self, air, name, avId, period)
self.count = 0
def flush(self):
ServerEventBuffer.flush(self)
if not self.count:
return
self.writeEvent('%s' % self.count)
self.count = 0
def addEvent(self):
self.count += 1
self.considerFlush()
class ServerEventMultiAccumulator(ServerEventBuffer):
def __init__(self, air, name, avId, period = None):
ServerEventBuffer.__init__(self, air, name, avId, period)
self.events = {}
def flush(self):
ServerEventBuffer.flush(self)
if not len(self.events):
return
msg = ''
eventNames = self.events.keys()
eventNames.sort()
for eventName in eventNames:
msg += '%s:%s' % (eventName, self.events[eventName])
if eventName != eventNames[-1]:
msg += ','
self.writeEvent(msg)
self.events = {}
def addEvent(self, eventName):
self.events.setdefault(eventName, 0)
self.events[eventName] += 1
self.considerFlush()