diff options
Diffstat (limited to 'pyload/manager/Remote.py')
-rw-r--r-- | pyload/manager/Remote.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/pyload/manager/Remote.py b/pyload/manager/Remote.py new file mode 100644 index 000000000..6023cdcfd --- /dev/null +++ b/pyload/manager/Remote.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# @author: RaNaN + +import threading +import traceback + + +class BackendBase(threading.Thread): + + def __init__(self, manager): + threading.Thread.__init__(self) + self.m = manager + self.core = manager.core + self.enabled = True + self.running = False + + + def run(self): + self.running = True + try: + self.serve() + except Exception, e: + self.core.log.error(_("Remote backend error: %s") % e) + if self.core.debug: + traceback.print_exc() + finally: + self.running = False + + + def setup(self, host, port): + pass + + + def checkDeps(self): + return True + + + def serve(self): + pass + + + def shutdown(self): + pass + + + def stop(self): + self.enabled = False #: set flag and call shutdowm message, so thread can react + self.shutdown() + + +class RemoteManager(object): + available = [] + + + def __init__(self, core): + self.core = core + self.backends = [] + + if self.core.remote: + self.available.append("ThriftBackend") + # else: + # self.available.append("SocketBackend") + + + def startBackends(self): + host = self.core.config.get("remote", "listenaddr") + port = self.core.config.get("remote", "port") + + for b in self.available: + klass = getattr(__import__("pyload.remote.%s" % b, globals(), locals(), [b], -1), b) + backend = klass(self) + if not backend.checkDeps(): + continue + try: + backend.setup(host, port) + self.core.log.info(_("Starting %(name)s: %(addr)s:%(port)s") % {"name": b, "addr": host, "port": port}) + except Exception, e: + self.core.log.error(_("Failed loading backend %(name)s | %(error)s") % {"name": b, "error": str(e)}) + if self.core.debug: + traceback.print_exc() + else: + backend.start() + self.backends.append(backend) + + port += 1 |