X-Git-Url: https://git.mxchange.org/?p=quix0rs-apt-p2p.git;a=blobdiff_plain;f=apt_p2p%2Fapt_p2p.py;fp=apt_p2p%2Fapt_p2p.py;h=af7790a7bb6ec06165cdfd552b27cba988c681b0;hp=4200f6299b78377593ce17cd6ad7b6973de7578e;hb=e848bee6cd8bd9ba754a21c3aff835f86d9c1aee;hpb=c5cc5788c6800526472a68cdd7444a6f4253b74b diff --git a/apt_p2p/apt_p2p.py b/apt_p2p/apt_p2p.py index 4200f62..af7790a 100644 --- a/apt_p2p/apt_p2p.py +++ b/apt_p2p/apt_p2p.py @@ -14,7 +14,7 @@ from urlparse import urlunparse from urllib import unquote import os, re, sha -from twisted.internet import defer, reactor +from twisted.internet import defer, reactor, protocol from twisted.web2 import server, http, http_headers, static from twisted.python import log, failure from twisted.python.filepath import FilePath @@ -36,7 +36,7 @@ TORRENT_PIECES = 70 download_dir = 'cache' peer_dir = 'peers' -class AptP2P: +class AptP2P(protocol.Factory): """The main code object that does all of the work. Contains all of the sub-components that do all the low-level work, and @@ -75,29 +75,40 @@ class AptP2P: """ log.msg('Initializing the main apt_p2p application') self.dhtClass = dhtClass + + #{ Factory interface + def startFactory(self): + reactor.callLater(0, self._startFactory) + + def _startFactory(self): + log.msg('Starting the main apt_p2p application') self.cache_dir = FilePath(config.get('DEFAULT', 'CACHE_DIR')) if not self.cache_dir.child(download_dir).exists(): self.cache_dir.child(download_dir).makedirs() if not self.cache_dir.child(peer_dir).exists(): self.cache_dir.child(peer_dir).makedirs() self.db = DB(self.cache_dir.child('apt-p2p.db')) - self.dht = dhtClass() + self.dht = self.dhtClass() self.dht.loadConfig(config, config.get('DEFAULT', 'DHT')) self.dht.join().addCallbacks(self.joinComplete, self.joinError) self.stats = StatsLogger(self.db) self.http_server = TopLevel(self.cache_dir.child(download_dir), self.db, self) - self.getHTTPFactory = self.http_server.getHTTPFactory + self.http_server.getHTTPFactory().startFactory() self.peers = PeerManager(self.cache_dir.child(peer_dir), self.dht, self.stats) self.mirrors = MirrorManager(self.cache_dir) self.cache = CacheManager(self.cache_dir.child(download_dir), self.db, self) self.my_contact = None - reactor.addSystemEventTrigger('before', 'shutdown', self.shutdown) - - #{ Maintenance - def shutdown(self): + + def stopFactory(self): + log.msg('Stoppping the main apt_p2p application') + self.http_server.getHTTPFactory().stopFactory() self.stats.save() self.db.close() + + def buildProtocol(self, addr): + return self.http_server.getHTTPFactory().buildProtocol(addr) + #{ DHT Maintenance def joinComplete(self, result): """Complete the DHT join process and determine our download information.