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
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
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