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

observerNotifier.py (1516B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\util\observerNotifier.py
      2 
      3 
      4 class ObserverNotifier(object):
      5 
      6     def __init__(self):
      7         self.subscribers = {}
      8 
      9     def get_value(self):
     10         raise NotImplementedError('Must implement ObserverNotifier::get_value in derived class')
     11 
     12     def start_updates(self):
     13         raise NotImplementedError('Must implement ObserverNotifier::start_updates in derived class')
     14 
     15     def stop_updates(self):
     16         raise NotImplementedError('Must implement ObserverNotifier::stop_updates in derived class')
     17 
     18     def register_subscriber(self, subscriber, callback):
     19         if subscriber not in self.subscribers:
     20             self.subscribers[subscriber] = callback
     21             self._notify_subscriber(subscriber, self.get_value())
     22             self.start_updates()
     23 
     24     def unregister_subscriber(self, subscriber):
     25         if subscriber in self.subscribers:
     26             del self.subscribers[subscriber]
     27         if not self.subscribers:
     28             self.stop_updates()
     29 
     30     def _notify_subscribers(self, update):
     31         all_subscribers = self.subscribers.copy()
     32         for subscriber in all_subscribers:
     33             self._notify_subscriber(subscriber, update)
     34 
     35     def _notify_subscriber(self, subscriber, update):
     36         if not subscriber or getattr(subscriber, 'destroyed', False):
     37             self.unregister_subscriber(subscriber)
     38         elif subscriber in self.subscribers:
     39             self.subscribers[subscriber](update)