예제 #1
0
파일: manager.py 프로젝트: kapetan/bitless
    def bitfield_received(self, bitfield):
        with self._wanted_pieces:
            self._piece_count += bitfield.to_vector()

            for piece in self._wanted_pieces:
                if bitfield.get(piece):
                    return True

            for task in self._tasks:
                if piece == task.index:
                    return True

            return False
예제 #2
0
파일: manager.py 프로젝트: kapetan/bitless
    def bitfield_received(self, bitfield):
        with self._wanted_pieces:
            self._piece_count += bitfield.to_vector()
            
            for piece in self._wanted_pieces:
                if bitfield.get(piece):
                    return True

            for task in self._tasks:
                if piece == task.index:
                    return True

            return False
예제 #3
0
파일: manager.py 프로젝트: kapetan/bitless
    def next_piece(self, peer, bitfield):
        with self._wanted_pieces:
            if self.completed() or self._halt:
                return None

            for task in self._tasks:
                if task.stale() and bitfield.get(task.index):
                    task.add_peer(peer)
                    return task

            if len(self._tasks) > MAX_TASKS:
                return None

            next = self._select_piece(bitfield)
            #task = DownloadTask(self._storage.piece(next), self)
            task = DownloadTask(self._storage.empty_piece(next), self)  #\
            #storage.Piece.create_empty_piece(\
            #    next, self._torrent.piece_size(next)), self)
            self._wanted_pieces.remove(next)
            self._tasks.append(task)
            task.add_peer(peer)

            return task
예제 #4
0
파일: manager.py 프로젝트: kapetan/bitless
    def next_piece(self, peer, bitfield):
        with self._wanted_pieces:
            if self.completed() or self._halt:
                return None

            for task in self._tasks:
                if task.stale() and bitfield.get(task.index):
                    task.add_peer(peer)
                    return task

            if len(self._tasks) > MAX_TASKS:
                return None

            next = self._select_piece(bitfield)
            #task = DownloadTask(self._storage.piece(next), self)
            task = DownloadTask(self._storage.empty_piece(next), self)#\
                #storage.Piece.create_empty_piece(\
                #    next, self._torrent.piece_size(next)), self)
            self._wanted_pieces.remove(next)
            self._tasks.append(task)
            task.add_peer(peer)

            return task