⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statistics.py

📁 一个多点下载且源码公开的P2P软件
💻 PY
字号:
# Written by Edward Keyes# see LICENSE.txt for license informationfrom threading import Eventtry:    Trueexcept:    True = 1    False = 0class Statistics_Response:    pass    # empty classclass Statistics:    def __init__(self, upmeasure, downmeasure, connecter, httpdl,                 ratelimiter, rerequest_lastfailed, fdatflag):        self.upmeasure = upmeasure        self.downmeasure = downmeasure        self.connecter = connecter        self.httpdl = httpdl        self.ratelimiter = ratelimiter        self.downloader = connecter.downloader        self.picker = connecter.downloader.picker        self.storage = connecter.downloader.storage        self.torrentmeasure = connecter.downloader.totalmeasure        self.rerequest_lastfailed = rerequest_lastfailed        self.fdatflag = fdatflag        self.fdatactive = False        self.piecescomplete = None        self.placesopen = None        self.storage_totalpieces = len(self.storage.hashes)    def set_dirstats(self, files, piece_length):        self.piecescomplete = 0        self.placesopen = 0        self.filelistupdated = Event()        self.filelistupdated.set()        frange = xrange(len(files))        self.filepieces = [[] for x in frange]        self.filepieces2 = [[] for x in frange]        self.fileamtdone = [0.0 for x in frange]        self.filecomplete = [False for x in frange]        self.fileinplace = [False for x in frange]        start = 0L        for i in frange:            l = files[i][1]            if l == 0:                self.fileamtdone[i] = 1.0                self.filecomplete[i] = True                self.fileinplace[i] = True            else:                fp = self.filepieces[i]                fp2 = self.filepieces2[i]                for piece in range(int(start/piece_length),                                   int((start+l-1)/piece_length)+1):                    fp.append(piece)                    fp2.append(piece)                start += l    def update(self):        s = Statistics_Response()        s.upTotal = self.upmeasure.get_total()        s.downTotal = self.downmeasure.get_total()        s.last_failed = self.rerequest_lastfailed()        s.external_connection_made = self.connecter.external_connection_made        if s.downTotal > 0:            s.shareRating = float(s.upTotal)/s.downTotal        elif s.upTotal == 0:           s.shareRating = 0.0        else:           s.shareRating = -1.0        s.torrentRate = self.torrentmeasure.get_rate()        s.torrentTotal = self.torrentmeasure.get_total()        s.numSeeds = self.picker.seeds_connected        s.numOldSeeds = self.downloader.num_disconnected_seeds()        s.numPeers = len(self.downloader.downloads)-s.numSeeds        s.numCopies = 0.0        for i in self.picker.crosscount:            if i==0:                s.numCopies+=1            else:                s.numCopies+=1-float(i)/self.picker.numpieces                break        if self.picker.done:            s.numCopies2 = s.numCopies + 1        else:            s.numCopies2 = 0.0            for i in self.picker.crosscount2:                if i==0:                    s.numCopies2+=1                else:                    s.numCopies2+=1-float(i)/self.picker.numpieces                    break        s.discarded = self.downloader.discarded        s.numSeeds += self.httpdl.seedsfound        s.numOldSeeds += self.httpdl.seedsfound        if s.numPeers == 0 or self.picker.numpieces == 0:            s.percentDone = 0.0        else:            s.percentDone = 100.0*(float(self.picker.totalcount)/self.picker.numpieces)/s.numPeers        s.backgroundallocating = self.storage.bgalloc_active        s.storage_totalpieces = len(self.storage.hashes)        s.storage_active = len(self.storage.stat_active)        s.storage_new = len(self.storage.stat_new)        s.storage_dirty = len(self.storage.dirty)        numdownloaded = self.storage.stat_numdownloaded        s.storage_justdownloaded = numdownloaded        s.storage_numcomplete = self.storage.stat_numfound + numdownloaded        s.storage_numflunked = self.storage.stat_numflunked        s.storage_isendgame = self.downloader.endgamemode        s.peers_kicked = self.downloader.kicked.items()        s.peers_banned = self.downloader.banned.items()        try:            s.upRate = int(self.ratelimiter.upload_rate/1000)            assert s.upRate < 5000        except:            s.upRate = 0        s.upSlots = self.ratelimiter.slots        if self.piecescomplete is None:     # not a multi-file torrent            return s                if self.fdatflag.isSet():            if not self.fdatactive:                self.fdatactive = True        else:            self.fdatactive = False        if self.piecescomplete != self.picker.numgot:            for i in xrange(len(self.filecomplete)):                if self.filecomplete[i]:                    continue                oldlist = self.filepieces[i]                newlist = [ piece                            for piece in oldlist                            if not self.storage.have[piece] ]                if len(newlist) != len(oldlist):                    self.filepieces[i] = newlist                    self.fileamtdone[i] = (                        (len(self.filepieces2[i])-len(newlist))                         /float(len(self.filepieces2[i])) )                    if not newlist:                        self.filecomplete[i] = True                    self.filelistupdated.set()            self.piecescomplete = self.picker.numgot        if ( self.filelistupdated.isSet()                 or self.placesopen != len(self.storage.places) ):            for i in xrange(len(self.filecomplete)):                if not self.filecomplete[i] or self.fileinplace[i]:                    continue                while self.filepieces2[i]:                    piece = self.filepieces2[i][-1]                    if self.storage.places[piece] != piece:                        break                    del self.filepieces2[i][-1]                if not self.filepieces2[i]:                    self.fileinplace[i] = True                    self.storage.set_file_readonly(i)                    self.filelistupdated.set()            self.placesopen = len(self.storage.places)        s.fileamtdone = self.fileamtdone        s.filecomplete = self.filecomplete        s.fileinplace = self.fileinplace        s.filelistupdated = self.filelistupdated        return s

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -