From: <bel...@us...> - 2003-03-29 00:54:19
|
Update of /cvsroot/btplusplus/BT++/src In directory sc8-pr-cvs1:/tmp/cvs-serv24784/src Modified Files: InfoManager.py LoaderManager.py TimedUpdate.py WT++.py WT++.pyw Log Message: Implementation of UpdateManager. Makes sure updates don't happen too fast if two automatic updaters collide (aka TimedUpdate and HTTP refreshs). Implemented FancyZURLOpener with zlib compression (used for InfoManager). Some fixes Index: InfoManager.py =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/InfoManager.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** InfoManager.py 28 Mar 2003 21:09:34 -0000 1.1 --- InfoManager.py 29 Mar 2003 00:54:09 -0000 1.2 *************** *** 1,3 **** --- 1,4 ---- from threading import * + from core.zurllib import * from urllib import FancyURLopener from core.bencode import bdecode *************** *** 19,23 **** self.update = update self.log = log ! self.opener = FancyURLopener() def AddLoader(self, loader): --- 20,24 ---- self.update = update self.log = log ! self.opener = FancyZURLopener() def AddLoader(self, loader): *************** *** 27,31 **** self.log('['+self.server+'] added '+loader.Config['File'], loglevel = LOG_TRIVIAL) self.loaders.append(loader) ! self.ForcedUpdate() def RemoveLoader(self, loader): --- 28,32 ---- self.log('['+self.server+'] added '+loader.Config['File'], loglevel = LOG_TRIVIAL) self.loaders.append(loader) ! self.Update( force = True ) def RemoveLoader(self, loader): *************** *** 38,43 **** except: pass data = h.read() ! try: self.log('['+self.server+'] Info Download finished', loglevel = LOG_TRIVIAL) ! except: pass h.close() failed = False --- 39,48 ---- except: pass data = h.read() ! if h.iscompressed(): ! try: self.log('['+self.server+'] Info Download finished (compressed)', loglevel = LOG_TRIVIAL) ! except: pass ! else: ! try: self.log('['+self.server+'] Info Download finished', loglevel = LOG_TRIVIAL) ! except: pass h.close() failed = False *************** *** 64,77 **** self.Updating = False ! def Update(self): ! if time() > (self.refreshed + (60 * self.update)): ! self.ForcedUpdate() ! ! def ForcedUpdate(self): ! if not self.Updating: ! self.ThrDownLoad = Thread( target = self.DownLoader ) ! self.ThrDownLoad.setDaemon(True) ! self.ThrDownLoad.start() ! class InfoManager: servers = [] --- 69,79 ---- self.Updating = False ! def Update(self, force = False): ! if (time() > (self.refreshed + (60 * self.update))) or force: ! if not self.Updating: ! self.ThrDownLoad = Thread( target = self.DownLoader ) ! self.ThrDownLoad.setDaemon(True) ! self.ThrDownLoad.start() ! class InfoManager: servers = [] Index: LoaderManager.py =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/LoaderManager.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** LoaderManager.py 28 Mar 2003 21:09:34 -0000 1.10 --- LoaderManager.py 29 Mar 2003 00:54:13 -0000 1.11 *************** *** 274,278 **** for loader in self.Loaders: if loader.IsRunning(): ! loader.PauseDownload() def Destroy(self): --- 274,278 ---- for loader in self.Loaders: if loader.IsRunning(): ! loader.PauseDownload(user = true) def Destroy(self): Index: TimedUpdate.py =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/TimedUpdate.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** TimedUpdate.py 19 Feb 2003 20:45:52 -0000 1.1 --- TimedUpdate.py 29 Mar 2003 00:54:13 -0000 1.2 *************** *** 1,3 **** ! from threading import Thread, Event class TimedUpdate(Thread): --- 1,4 ---- ! from threading import Thread, Event ! from time import time class TimedUpdate(Thread): *************** *** 25,26 **** --- 26,52 ---- apply( self._Func, self._Param ) self._Done.wait(self._Interval) + + class UpdateManager: + def __init__(self, interval, func, param = []): + self._Interval = interval + self._Func = func + self._Param = param + self._Refreshed = time() + + self._Thread = TimedUpdate(interval, self.Update) + self.Update( force = True ) + self._Thread.setDaemon(1) + self._Thread.Start() + + def Update(self, force = False): + if (time() > (self._Refreshed + self._Interval)) or force: + apply( self._Func, self._Param ) + self._Refreshed = time() + + def SetInterval(self, interval): + self._Interval = interval + self._Thread.SetInterval(interval) + + def ShutDown(self): + self._Thread.Shutdown() + Index: WT++.py =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/WT++.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** WT++.py 28 Mar 2003 21:09:34 -0000 1.5 --- WT++.py 29 Mar 2003 00:54:14 -0000 1.6 *************** *** 5,9 **** from shutil import copyfile from ConfigFile import Config ! from WebServer.BTWebServer import BTWebServer, BTWait, WTLoaders, WTSeeds from threading import * from readline import * --- 5,9 ---- from shutil import copyfile from ConfigFile import Config ! from WebServer.BTWebServer import BTWebServer, BTWait, WTLoaders, WTSeeds, WTTimer from threading import * from readline import * *************** *** 46,48 **** --- 46,49 ---- WTLoaders.ShutDown() WTSeeds.ShutDown() + WTTimer.ShutDown() Index: WT++.pyw =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/WT++.pyw,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** WT++.pyw 28 Mar 2003 21:09:34 -0000 1.2 --- WT++.pyw 29 Mar 2003 00:54:14 -0000 1.3 *************** *** 5,9 **** from shutil import copyfile from ConfigFile import Config ! from WebServer.BTWebServer import BTWebServer, BTWait, WTLoaders, WTSeeds from threading import * --- 5,9 ---- from shutil import copyfile from ConfigFile import Config ! from WebServer.BTWebServer import BTWebServer, BTWait, WTLoaders, WTSeeds, WTTimer from threading import * *************** *** 34,36 **** --- 34,37 ---- WTLoaders.ShutDown() WTSeeds.ShutDown() + WTTimer.ShutDown() |