download_bt1.py
来自「这是一个嵌入式linux系统下的命令工具包」· Python 代码 · 共 883 行 · 第 1/3 页
PY
883 行
for i in xrange(self.len_pieces): if self.storagewrapper.do_I_have(i): self.picker.complete(i) self.upmeasure = Measure(self.config['max_rate_period'], self.config['upload_rate_fudge']) self.downmeasure = Measure(self.config['max_rate_period']) if ratelimiter: self.ratelimiter = ratelimiter else: self.ratelimiter = RateLimiter(self.rawserver.add_task, self.config['upload_unit_size'], self.setConns) self.ratelimiter.set_upload_rate(self.config['max_upload_rate']) self.ratemeasure = RateMeasure() self.ratemeasure_datarejected = self.ratemeasure.data_rejected self.downloader = Downloader(self.storagewrapper, self.picker, self.config['request_backlog'], self.config['max_rate_period'], self.len_pieces, self.config['download_slice_size'], self._received_data, self.config['snub_time'], self.config['auto_kick'], self._kick_peer, self._ban_peer) self.downloader.set_download_rate(self.config['max_download_rate']) self.connecter = Connecter(self._make_upload, self.downloader, self.choker, self.len_pieces, self.upmeasure, self.config, self.ratelimiter, self.rawserver.add_task) self.encoder = Encoder(self.connecter, self.rawserver, self.myid, self.config['max_message_length'], self.rawserver.add_task, self.config['keepalive_interval'], self.infohash, self._received_raw_data, self.config) self.encoder_ban = self.encoder.ban self.httpdownloader = HTTPDownloader(self.storagewrapper, self.picker, self.rawserver, self.finflag, self.errorfunc, self.downloader, self.config['max_rate_period'], self.infohash, self._received_http_data, self.connecter.got_piece) if self.response.has_key('httpseeds') and not self.finflag.isSet(): for u in self.response['httpseeds']: self.httpdownloader.make_download(u) if self.selector_enabled: self.fileselector.tie_in(self.picker, self._cancelfunc, self._reqmorefunc, self.rerequest_ondownloadmore) if self.priority: self.fileselector.set_priorities_now(self.priority) self.appdataobj.deleteTorrentData(self.infohash) # erase old data once you've started modifying it if self.config['super_seeder']: self.set_super_seed() self.started = True return True def rerequest_complete(self): if self.rerequest: self.rerequest.announce(1) def rerequest_stopped(self): if self.rerequest: self.rerequest.announce(2) def rerequest_lastfailed(self): if self.rerequest: return self.rerequest.last_failed return False def rerequest_ondownloadmore(self): if self.rerequest: self.rerequest.hit() def startRerequester(self, seededfunc = None, force_rapid_update = False): if self.response.has_key('announce-list'): trackerlist = self.response['announce-list'] else: trackerlist = [[self.response['announce']]] self.rerequest = Rerequester(trackerlist, self.config['rerequest_interval'], self.rawserver.add_task, self.connecter.how_many_connections, self.config['min_peers'], self.encoder.start_connections, self.rawserver.add_task, self.storagewrapper.get_amount_left, self.upmeasure.get_total, self.downmeasure.get_total, self.port, self.config['ip'], self.myid, self.infohash, self.config['http_timeout'], self.errorfunc, self.excfunc, self.config['max_initiate'], self.doneflag, self.upmeasure.get_rate, self.downmeasure.get_rate, self.unpauseflag, self.config['dedicated_seed_id'], seededfunc, force_rapid_update ) self.rerequest.start() def _init_stats(self): self.statistics = Statistics(self.upmeasure, self.downmeasure, self.connecter, self.httpdownloader, self.ratelimiter, self.rerequest_lastfailed, self.filedatflag) if self.info.has_key('files'): self.statistics.set_dirstats(self.files, self.info['piece length']) if self.config['spew']: self.spewflag.set() def autoStats(self, displayfunc = None): if not displayfunc: displayfunc = self.statusfunc self._init_stats() DownloaderFeedback(self.choker, self.httpdownloader, self.rawserver.add_task, self.upmeasure.get_rate, self.downmeasure.get_rate, self.ratemeasure, self.storagewrapper.get_stats, self.datalength, self.finflag, self.spewflag, self.statistics, displayfunc, self.config['display_interval']) def startStats(self): self._init_stats() d = DownloaderFeedback(self.choker, self.httpdownloader, self.rawserver.add_task, self.upmeasure.get_rate, self.downmeasure.get_rate, self.ratemeasure, self.storagewrapper.get_stats, self.datalength, self.finflag, self.spewflag, self.statistics) return d.gather def getPortHandler(self): return self.encoder def shutdown(self, torrentdata = {}): if self.checking or self.started: self.storagewrapper.sync() self.storage.close() self.rerequest_stopped() if self.fileselector and self.started: if not self.failed: self.fileselector.finish() torrentdata['resume data'] = self.fileselector.pickle() try: self.appdataobj.writeTorrentData(self.infohash,torrentdata) except: self.appdataobj.deleteTorrentData(self.infohash) # clear it return not self.failed and not self.excflag.isSet() # if returns false, you may wish to auto-restart the torrent def setUploadRate(self, rate): try: def s(self = self, rate = rate): self.config['max_upload_rate'] = rate self.ratelimiter.set_upload_rate(rate) self.rawserver.add_task(s) except AttributeError: pass def setConns(self, conns, conns2 = None): if not conns2: conns2 = conns try: def s(self = self, conns = conns, conns2 = conns2): self.config['min_uploads'] = conns self.config['max_uploads'] = conns2 if (conns > 30): self.config['max_initiate'] = conns + 10 self.rawserver.add_task(s) except AttributeError: pass def setDownloadRate(self, rate): try: def s(self = self, rate = rate): self.config['max_download_rate'] = rate self.downloader.set_download_rate(rate) self.rawserver.add_task(s) except AttributeError: pass def startConnection(self, ip, port, id): self.encoder._start_connection((ip, port), id) def _startConnection(self, ipandport, id): self.encoder._start_connection(ipandport, id) def setInitiate(self, initiate): try: def s(self = self, initiate = initiate): self.config['max_initiate'] = initiate self.rawserver.add_task(s) except AttributeError: pass def getConfig(self): return self.config def getDefaults(self): return defaultargs(defaults) def getUsageText(self): return self.argslistheader def reannounce(self, special = None): try: def r(self = self, special = special): if special is None: self.rerequest.announce() else: self.rerequest.announce(specialurl = special) self.rawserver.add_task(r) except AttributeError: pass def getResponse(self): try: return self.response except: return None# def Pause(self):# try:# if self.storagewrapper:# self.rawserver.add_task(self._pausemaker, 0)# except:# return False# self.unpauseflag.clear()# return True## def _pausemaker(self):# self.whenpaused = clock()# self.unpauseflag.wait() # sticks a monkey wrench in the main thread## def Unpause(self):# self.unpauseflag.set()# if self.whenpaused and clock()-self.whenpaused > 60:# def r(self = self):# self.rerequest.announce(3) # rerequest automatically if paused for >60 seconds# self.rawserver.add_task(r) def Pause(self): if not self.storagewrapper: return False self.unpauseflag.clear() self.rawserver.add_task(self.onPause) return True def onPause(self): self.whenpaused = clock() if not self.downloader: return self.downloader.pause(True) self.encoder.pause(True) self.choker.pause(True) def Unpause(self): self.unpauseflag.set() self.rawserver.add_task(self.onUnpause) def onUnpause(self): if not self.downloader: return self.downloader.pause(False) self.encoder.pause(False) self.choker.pause(False) if self.rerequest and self.whenpaused and clock()-self.whenpaused > 60: self.rerequest.announce(3) # rerequest automatically if paused for >60 seconds def set_super_seed(self): try: self.superseedflag.set() def s(self = self): if self.finflag.isSet(): self._set_super_seed() self.rawserver.add_task(s) except AttributeError: pass def _set_super_seed(self): if not self.super_seeding_active: self.super_seeding_active = True self.errorfunc(' ** SUPER-SEED OPERATION ACTIVE **\n' + ' please set Max uploads so each peer gets 6-8 kB/s') def s(self = self): self.downloader.set_super_seed() self.choker.set_super_seed() self.rawserver.add_task(s) if self.finflag.isSet(): # mode started when already finished def r(self = self): self.rerequest.announce(3) # so after kicking everyone off, reannounce self.rawserver.add_task(r) def am_I_finished(self): return self.finflag.isSet() def get_transfer_stats(self): return self.upmeasure.get_total(), self.downmeasure.get_total()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?