diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-06-02 22:13:47 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-06-02 22:13:47 +0900 |
| commit | 482cf6aca45bdc8733c88db24058eca59143f923 (patch) | |
| tree | afd3f0641fe38dfe5ad4b63cee43803cd341a661 /src/DefaultPeerStorage.cc | |
| parent | a0706f5a44ccc171e5b861e4649a7ba861a218b3 (diff) | |
Fasten seed/download on fast connection
Diffstat (limited to 'src/DefaultPeerStorage.cc')
| -rw-r--r-- | src/DefaultPeerStorage.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index 60e13a72..6047462a 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -62,7 +62,8 @@ DefaultPeerStorage::DefaultPeerStorage() : maxPeerListSize_(MAX_PEER_LIST_SIZE), seederStateChoke_(make_unique<BtSeederStateChoke>()), leecherStateChoke_(make_unique<BtLeecherStateChoke>()), - lastTransferStatMapUpdated_(Timer::zero()) + lastTransferStatMapUpdated_(Timer::zero()), + forceChokeRound_(false) { } @@ -284,16 +285,21 @@ void DefaultPeerStorage::returnPeer(const std::shared_ptr<Peer>& peer) bool DefaultPeerStorage::chokeRoundIntervalElapsed() { constexpr auto CHOKE_ROUND_INTERVAL = 10_s; + auto forceChokeRound = forceChokeRound_; + forceChokeRound_ = false; + if (pieceStorage_->downloadFinished()) { + auto interval = forceChokeRound ? 1_s : CHOKE_ROUND_INTERVAL; return seederStateChoke_->getLastRound().difference(global::wallclock()) >= - CHOKE_ROUND_INTERVAL; - } - else { - return leecherStateChoke_->getLastRound().difference(global::wallclock()) >= - CHOKE_ROUND_INTERVAL; + interval; } + + return leecherStateChoke_->getLastRound().difference(global::wallclock()) >= + CHOKE_ROUND_INTERVAL; } +void DefaultPeerStorage::scheduleForcedChokeRound() { forceChokeRound_ = true; } + void DefaultPeerStorage::executeChoke() { if (pieceStorage_->downloadFinished()) { |
