NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

killRightTracker.py (2398B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\lib\killRightTracker.py
      2 from collections import defaultdict
      3 
      4 class KillRightTracker(object):
      5 
      6     def __init__(self, fetcher, getTimeFunc, cacheTime):
      7         self.killRightsByToID = {}
      8         self.FetchKillRights = fetcher
      9         self.GetTime = getTimeFunc
     10         self.cacheTime = cacheTime
     11 
     12     def GetInvalidKillRights(self, toIDs):
     13         return [ toID for toID in toIDs if not self.IsDataValid(toID) ]
     14 
     15     def GetKillRights(self, toIDs, *validIDs):
     16         toIDsToFetch = self.GetInvalidKillRights(toIDs)
     17         if toIDsToFetch:
     18             newKillRights = self.FetchKillRights(toIDsToFetch)
     19             self.CacheKillRights(newKillRights, toIDsToFetch)
     20         ret = []
     21         for toID in toIDs:
     22             try:
     23                 ret.extend([ killRight for killRight in self.killRightsByToID[toID][1].itervalues() if killRight.restrictedTo is None or killRight.restrictedTo in validIDs ])
     24             except KeyError:
     25                 pass
     26 
     27         return ret
     28 
     29     def CacheKillRights(self, newKillRights, toIDs):
     30         killRightsByToID = defaultdict(dict)
     31         for killRight in newKillRights:
     32             killRightsByToID[killRight.toID][killRight.killRightID] = killRight
     33 
     34         currentTime = self.GetTime()
     35         for toID in toIDs:
     36             self.killRightsByToID[toID] = (currentTime, killRightsByToID[toID])
     37 
     38     def OnKillRightAdded(self, killRight):
     39         if killRight.toID not in self.killRightsByToID:
     40             self.killRightsByToID[killRight.toID] = (self.GetTime(), {})
     41         self.killRightsByToID[killRight.toID][1][killRight.killRightID] = killRight
     42 
     43     def OnKillRightsAdded(self, killRights):
     44         for killRight in killRights:
     45             self.OnKillRightAdded(killRight)
     46 
     47     def IsDataValid(self, toID):
     48         if toID not in self.killRightsByToID:
     49             return False
     50         lastUpdateTime = self.killRightsByToID[toID][0]
     51         if lastUpdateTime + self.cacheTime < self.GetTime():
     52             return False
     53         return True
     54 
     55     def GetKillRightsFromCache(self, toID):
     56         try:
     57             return self.killRightsByToID[toID][1]
     58         except KeyError:
     59             return []
     60 
     61     def OnKillRightRemoved(self, toID, killRightID):
     62         try:
     63             del self.killRightsByToID[toID][1][killRightID]
     64         except KeyError:
     65             pass