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

eventCounters.py (1137B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dogma\eventCounters.py
      2 from contextlib import contextmanager
      3 
      4 class EventCount(object):
      5 
      6     def __init__(self):
      7         self.__eventCount = {}
      8 
      9     @contextmanager
     10     def Event(self, key):
     11         self._AddEventCount(key)
     12         try:
     13             yield
     14         finally:
     15             self._DecreaseEventCount(key)
     16 
     17         self._OnEvent(key)
     18 
     19     def _AddEventCount(self, key):
     20         if key not in self.__eventCount:
     21             self.__eventCount[key] = 1
     22         else:
     23             self.__eventCount[key] += 1
     24 
     25     def _DecreaseEventCount(self, key):
     26         self.__eventCount[key] -= 1
     27         if self.__eventCount[key] < 1:
     28             del self.__eventCount[key]
     29 
     30     def IsEventHappening(self, key):
     31         if key is None:
     32             return False
     33         return self.__eventCount.get(key, 0) > 0
     34 
     35     def _OnEvent(self, key):
     36         pass
     37 
     38 
     39 class BrainUpdate(EventCount):
     40 
     41     def __init__(self, callback):
     42         super(BrainUpdate, self).__init__()
     43         self.__callback = callback
     44 
     45     def _OnEvent(self, key):
     46         self.__callback(key)