From d6100c75072b9c5db31e44176514c63d96cfcbb5 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 29 Apr 2006 16:18:00 +0000 Subject: [PATCH] --- src/PeerChokeCommand.cc | 44 +++++++++++++---------------------- src/PeerChokeCommand.h | 3 +-- src/PeerInteractionCommand.cc | 2 +- src/TorrentDownloadEngine.cc | 6 +++-- src/TorrentDownloadEngine.h | 1 + 5 files changed, 23 insertions(+), 33 deletions(-) diff --git a/src/PeerChokeCommand.cc b/src/PeerChokeCommand.cc index 38771243..8a6ebaf9 100644 --- a/src/PeerChokeCommand.cc +++ b/src/PeerChokeCommand.cc @@ -44,36 +44,26 @@ void PeerChokeCommand::optUnchokingPeer(Peers& peers) const { } Peer* peer = peers.front(); peer->optUnchoking = true; - /* - Peers::iterator itr = peers.begin(); - for(;itr != peers.end(); itr++) { - if((*itr)->optUnchoking) { - break; - } - } - if(itr != peers.end()) { - (*itr)->optUnchoking = false; - itr++; - } - if(itr == peers.end()) { - itr = peers.begin(); - } - (*itr)->optUnchoking = true; - */ logger->debug("opt, unchoking %s, delta=%d", peer->ipaddr.c_str(), peer->getDeltaUpload()); + if(e->torrentMan->isEndGame()) { + Peers::iterator itr = peers.begin()+1; + for(; itr != peers.end(); itr++) { + Peer* peer = *itr; + if(peer->amInterested && peer->peerInterested) { + peer->optUnchoking = true; + logger->debug("opt, unchoking %s, delta=%d", + peer->ipaddr.c_str(), peer->getDeltaUpload()); + break; + } + } + } } -void PeerChokeCommand::setAllPeerResetDeltaUpload(Peers& peers) const { +void PeerChokeCommand::setAllPeerResetDelta(Peers& peers) const { for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) { Peer* peer = *itr; peer->resetDeltaUpload(); - } -} - -void PeerChokeCommand::setAllPeerResetDeltaDownload(Peers& peers) const { - for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) { - Peer* peer = *itr; peer->resetDeltaDownload(); } } @@ -113,6 +103,7 @@ bool PeerChokeCommand::execute() { Peer* peer = *itr; if(peer->peerInterested) { peer->chokingRequired = false; + peer->optUnchoking = false; itr = peers.erase(itr); unchokingCount--; logger->debug("cat01, unchoking %s, delta=%d", peer->ipaddr.c_str(), peer->getDeltaUpload()); @@ -124,6 +115,7 @@ bool PeerChokeCommand::execute() { Peer* peer = *itr; if(!peer->peerInterested) { peer->chokingRequired = false; + peer->optUnchoking = false; itr = peers.erase(itr); logger->debug("cat02, unchoking %s, delta=%d", peer->ipaddr.c_str(), peer->getDeltaUpload()); break; @@ -136,11 +128,7 @@ bool PeerChokeCommand::execute() { rotate = 0; } rotate++; - if(e->torrentMan->downloadComplete()) { - setAllPeerResetDeltaDownload(e->torrentMan->getActivePeers()); - } else { - setAllPeerResetDeltaUpload(e->torrentMan->getActivePeers()); - } + setAllPeerResetDelta(e->torrentMan->getActivePeers()); SleepCommand* command = new SleepCommand(cuid, e, this, interval); e->commands.push(command); diff --git a/src/PeerChokeCommand.h b/src/PeerChokeCommand.h index 855cb1cf..76204cc0 100644 --- a/src/PeerChokeCommand.h +++ b/src/PeerChokeCommand.h @@ -34,8 +34,7 @@ private: void orderByUploadRate(Peers& peers) const; void orderByDownloadRate(Peers& peers) const; void setAllPeerChoked(Peers& peers) const; - void setAllPeerResetDeltaUpload(Peers& peers) const; - void setAllPeerResetDeltaDownload(Peers& peers) const; + void setAllPeerResetDelta(Peers& peers) const; void optUnchokingPeer(Peers& peers) const; public: diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index f11baf6b..eec37434 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -333,7 +333,7 @@ Piece PeerInteractionCommand::getNewPieceAndSendInterest() { PendingMessage pendingMessage(PeerMessage::NOT_INTERESTED, peerConnection); sendMessageQueue->addPendingMessage(pendingMessage); } else { - logger->debug("CUID#%d - starting download for piece index=%d", cuid, piece.getIndex()); + logger->debug("CUID#%d - starting download for piece index=%d (%d/%d completed)", cuid, piece.getIndex(), piece.countCompleteBlock(), piece.countBlock()); logger->debug("CUID#%d - try to send interested", cuid); PendingMessage pendingMessage(PeerMessage::INTERESTED, peerConnection); sendMessageQueue->addPendingMessage(pendingMessage); diff --git a/src/TorrentDownloadEngine.cc b/src/TorrentDownloadEngine.cc index 48038b6d..ebcb6eaf 100644 --- a/src/TorrentDownloadEngine.cc +++ b/src/TorrentDownloadEngine.cc @@ -96,8 +96,10 @@ void TorrentDownloadEngine::calculateStatistics() { totalLength = torrentMan->getTotalLength(); } - downloadSpeed = calculateSpeed(sessionDownloadLengthArray[currentCp], elapsed); - uploadSpeed = calculateSpeed(sessionUploadLengthArray[currentCp], elapsed); + if(elapsed > 0) { + downloadSpeed = calculateSpeed(sessionDownloadLengthArray[currentCp], elapsed); + uploadSpeed = calculateSpeed(sessionUploadLengthArray[currentCp], elapsed); + } if(elapsed-lastElapsed >= 1) { avgSpeed = calculateSpeed(sessionDownloadLength, diff --git a/src/TorrentDownloadEngine.h b/src/TorrentDownloadEngine.h index a6db4665..1e940921 100644 --- a/src/TorrentDownloadEngine.h +++ b/src/TorrentDownloadEngine.h @@ -68,6 +68,7 @@ public: // returns uploading speed in byte/sec. int getUploadSpeed() const { return uploadSpeed; } + int getDownloadSpeed() const { return downloadSpeed; } }; #endif // _D_TORRENT_DOWNLOAD_ENGINE_H_