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 + -
显示快捷键?