def __init__(self, refresh_rate=900.0): ImmortalThread.__init__(self, name='RAFD') if debug: print 'init RAFD Server ' self.semaphore = Semaphore(0) self._scheduler = scheduler self.refresh_rate = refresh_rate scheduler.seconds_from_now_do(30.0, self._tick)
class _RAFD_Thread(ImmortalThread): def __init__(self, refresh_rate=900.0): ImmortalThread.__init__(self, name='RAFD') if debug: print 'init RAFD Server ' self.semaphore = Semaphore(0) self._scheduler = scheduler self.refresh_rate = refresh_rate scheduler.seconds_from_now_do(30.0, self._tick) def reincarnate(self): msglog.log('broadway', msglog.types.INFO, 'RAFD restarting\n') def run(self): if debug: print '_RAFD_Thread: run' while 1: self._tock() def _tick(self): #also call this start ticking after a stop self.semaphore.release() scheduler.enabled = 1 scheduler.seconds_from_now_do(self.refresh_rate, self._tick) if debug > 4: print 'RAFD tick' def _tock(self): while 1: try: self.semaphore.acquire() _module_lock.acquire() try: if debug > 4: print 'RAFD tock' for k in BBMD_servers.keys(): b = BBMD_servers[k] if b.register_as_foreign_device: # send a new RAFD packet to remote BBMD msg = RegisterForeignDevice( None, self.refresh_rate) if debug > 4: print 'RAFD update TTL' b.bdt.distribute(k, None, msg) finally: _module_lock.release() except: if msglog: msglog.exception() msglog.log('broadway', msglog.types.INFO, 'RAFD timer thread restarting\n') pause(10.0) def _stop_ticking(self): if self._scheduler: self._scheduler.enabled = 0
class _RAFD_Thread(ImmortalThread): def __init__(self, refresh_rate=900.0): ImmortalThread.__init__(self, name='RAFD') if debug: print 'init RAFD Server ' self.semaphore = Semaphore(0) self._scheduler = scheduler self.refresh_rate = refresh_rate scheduler.seconds_from_now_do(30.0, self._tick) def reincarnate(self): msglog.log('broadway',msglog.types.INFO, 'RAFD restarting\n') def run(self): if debug: print '_RAFD_Thread: run' while 1: self._tock() def _tick(self): #also call this start ticking after a stop self.semaphore.release() scheduler.enabled = 1 scheduler.seconds_from_now_do(self.refresh_rate, self._tick) if debug > 4: print 'RAFD tick' def _tock(self): while 1: try: self.semaphore.acquire() _module_lock.acquire() try: if debug > 4: print 'RAFD tock' for k in BBMD_servers.keys(): b = BBMD_servers[k] if b.register_as_foreign_device: # send a new RAFD packet to remote BBMD msg = RegisterForeignDevice(None, self.refresh_rate) if debug > 4: print 'RAFD update TTL' b.bdt.distribute(k, None, msg) finally: _module_lock.release() except: if msglog: msglog.exception() msglog.log('broadway', msglog.types.INFO, 'RAFD timer thread restarting\n') pause(10.0) def _stop_ticking(self): if self._scheduler: self._scheduler.enabled = 0
def _start_ticking(self): if debug > 4: print 'start ticking' self.semaphore = Semaphore(0) self._scheduler = scheduler scheduler.seconds_from_now_do(1.0, self._tick) # @fixme Switching to Thread object caused # mpx/lib/bacnet/_test_case_bvlc.py to hang after completing. # Figure out why, and switch over the Thread object. threading._start_new_thread(self._tock, ())