/* */ #include "TorrentConsoleDownloadEngine.h" #include "Util.h" TorrentConsoleDownloadEngine::TorrentConsoleDownloadEngine() {} TorrentConsoleDownloadEngine::~TorrentConsoleDownloadEngine() {} void TorrentConsoleDownloadEngine::printStatistics() { printf("\r "); printf("\r"); if(torrentMan->downloadComplete()) { printf("Download Completed "); } else { printf("%s/%sB %d%% DW:%.2f", Util::llitos(torrentMan->getDownloadedSize(), true).c_str(), Util::llitos(torrentMan->totalSize, true).c_str(), (torrentMan->totalSize == 0 ? 0 : (int)((torrentMan->getDownloadedSize()*100)/torrentMan->totalSize)), downloadSpeed/1000.0); } printf(" UP:%.2f(%s) %dpeers", uploadSpeed/1000.0, Util::llitos(torrentMan->getUploadedSize(), true).c_str(), torrentMan->connections); fflush(stdout); } void TorrentConsoleDownloadEngine::initStatistics() { downloadSpeed = 0; uploadSpeed = 0; lastElapsed = 0; gettimeofday(&cp[0], NULL); gettimeofday(&cp[1], NULL); sessionDownloadSize[0] = 0; sessionDownloadSize[1] = 0; sessionUploadSize[0] = 0; sessionUploadSize[1] = 0; currentCp = 0; } int TorrentConsoleDownloadEngine::calculateSpeed(long long int sessionSize, long long int elapsed) { int nowSpeed = (int)(sessionSize/(elapsed/1000000.0)); return nowSpeed; } void TorrentConsoleDownloadEngine::calculateStatistics() { struct timeval now; gettimeofday(&now, NULL); long long int elapsed = Util::difftv(now, cp[currentCp]); sessionDownloadSize[0] += torrentMan->getDeltaDownload(); sessionUploadSize[0] += torrentMan->getDeltaUpload(); sessionDownloadSize[1] += torrentMan->getDeltaDownload(); sessionUploadSize[1] += torrentMan->getDeltaUpload(); downloadSpeed = calculateSpeed(sessionDownloadSize[currentCp], elapsed); uploadSpeed = calculateSpeed(sessionUploadSize[currentCp], elapsed); torrentMan->resetDeltaDownload(); torrentMan->resetDeltaUpload(); if(elapsed-lastElapsed >= 1000000) { printStatistics(); lastElapsed = elapsed; } if(elapsed > 15*1000000) { sessionDownloadSize[currentCp] = 0; sessionUploadSize[currentCp] = 0; cp[currentCp] = now; lastElapsed = 0; currentCp = currentCp ? 0 : 1; } }