示例#1
0
 def part_download_finished(self, file_id, part_num):
     file_id = str(file_id)
     FilesManager.set_status_part_for_file(file_id, part_num, "completed")
     if self.download_queues.has_key(file_id):
         queue = self.download_queues[file_id]
         if queue:
             queue.emit(SIGNAL("part_download_finished"), file_id, part_num)
示例#2
0
 def download_part(self, peer_ip, peer_port, file_id, file_part):
     FilesManager.set_status_part_for_file(file_id, file_part, "downloading")
     downloadSocket = connect_socket(peer_ip, peer_port)
     downloadSocket.send("RETP"+format_fileid(file_id)+format_partnum(file_part))
     #downloadSocket.send(format_fileid(file_id))
     #downloadSocket.send(format_partnum(file_part))
     # Star a thread that will take care of the download and of the socket management
     f = FilesManager.find_file_by_id(file_id)
     dlThread = DownloadThread(downloadSocket, f.filename, f.id, file_part, peer_ip, self, self.ui_handler)
     dlThread.start()
     self.download_threads.append(dlThread)
示例#3
0
    def run(self):

        command = str(read_from_socket(self._socket, 4))

        if command == "AREP":

            klog("Received AREP")

            chunk_number = int(read_from_socket(self._socket, 6))
            #try:
            klog("Download started")

            klog("chunk number: " + str(chunk_number))
            newFile = open(FilesManager.get_filepart_path_from_file(self._file_id, self._file_part), "wb") # a = append, b = binary mode

            for i in range(0, chunk_number):
                chunk_length = read_from_socket(self._socket, 5)
                chunk_length = int(chunk_length)

                chunk_data = read_from_socket(self._socket, chunk_length)
                newFile.write(chunk_data)

                percent = i* 100/chunk_number
                self._ui_handler.download_file_changed(self._filename, self._file_id, self._file_part, self._peer_ip, percent)

            newFile.close()
            self._ui_handler.download_file_changed(self._filename, self._file_id, self._file_part, self._peer_ip, 100)
            klog("Download completed")

            f = FilesManager.find_file_by_id(self._file_id)
            self._request_emitter.part_download_finished(self._file_id, self._file_part)

            self._request_emitter.register_part_to_tracker(f, self._file_part)

#            except Exception, ex:
 #               klog("An exception has occurred: "+str(ex))

        else:
            FilesManager.set_status_part_for_file(self._file_id, self._file_part, "empty")

        self._socket.close()