summaryrefslogtreecommitdiff
path: root/src/DefaultPeerStorage.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-09 17:14:40 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-09 17:14:40 +0000
commitc064a2cd9e9034d6cd77bfdd70948cbef193d2cc (patch)
tree692e9d54e8032af919514f0d8608286ce47b74b9 /src/DefaultPeerStorage.cc
parent04a70520139efcfb287e329ae97e51ddf77605c6 (diff)
2008-02-10 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Extract the Peer class's member variables, which are only needed after PeerInteractionCommand, into PeerSessionResource class. This class is instantiated in PeerInteractionCommand class's ctor and released in its dtor. This will make Peer class lightweight and uses less memory for peers which are not connected and wait in the queue. * src/PeerChokeCommand.cc * src/PeerSessionResource.{h, cc} * src/PeerInteractionCommand.cc * src/PeerAbstractCommand.cc: Note: 0 is given to onAbort() function. * src/DefaultBtInteractive.cc * src/BtPieceMessage.cc * src/BtInterestedMessage.cc * src/BtUnchokeMessage.cc * src/DefaultPeerStorage.{h, cc} * src/PeerInitiateConnectionCommand.cc * src/ActivePeerConnectionCommand.cc * src/BtNotInterestedMessage.cc * src/DefaultBtMessageDispatcher.cc * src/BtChokeMessage.cc * src/BtRequestMessage.cc * src/Peer.{h, cc} * src/BtRegistry.h * src/TrackerWatcherCommand.cc * src/PeerReceiveHandshakeCommand.cc * test/BtExtendedMessageTest.cc * test/BtAllowedFastMessageTest.cc * test/BtCancelMessageTest.cc * test/DefaultPieceStorageTest.cc * test/BtBitfieldMessageTest.cc * test/BtHaveMessageTest.cc * test/BtNotInterestedMessageTest.cc * test/BtRequestMessageTest.cc * test/PeerSessionResourceTest.cc * test/DefaultBtMessageDispatcherTest.cc * test/PeerTest.cc * test/BtInterestedMessageTest.cc * test/BtRejectMessageTest.cc * test/BtChokeMessageTest.cc * test/DefaultPeerStorageTest.cc * test/BtHaveNoneMessageTest.cc * test/BtHaveAllMessageTest.cc * test/DefaultExtensionMessageFactoryTest.cc * test/BtUnchokeMessageTest.cc * test/DefaultBtMessageFactoryTest.cc * test/HandshakeExtensionMessageTest.cc * test/UTPexExtensionMessageTest.cc * test/DefaultBtRequestFactoryTest.cc * test/BtPieceMessageTest.cc Removed typedef PeerStats. * src/PeerStat.h * src/SegmentMan.cc
Diffstat (limited to 'src/DefaultPeerStorage.cc')
-rw-r--r--src/DefaultPeerStorage.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc
index a00409c1..c79a4dca 100644
--- a/src/DefaultPeerStorage.cc
+++ b/src/DefaultPeerStorage.cc
@@ -106,7 +106,7 @@ const Peers& DefaultPeerStorage::getPeers() {
class FindFinePeer {
public:
bool operator()(const PeerHandle& peer) const {
- return peer->cuid == 0 && peer->isGood();
+ return peer->unused() && peer->isGood();
}
};
@@ -184,9 +184,9 @@ public:
if(peer->isActive()) {
_stat.downloadSpeed += peer->calculateDownloadSpeed(_now);
_stat.uploadSpeed += peer->calculateUploadSpeed(_now);
+ _stat.sessionDownloadLength += peer->getSessionDownloadLength();
+ _stat.sessionUploadLength += peer->getSessionUploadLength();
}
- _stat.sessionDownloadLength += peer->getSessionDownloadLength();
- _stat.sessionUploadLength += peer->getSessionUploadLength();
}
const TransferStat& getTransferStat() { return _stat; }
@@ -206,7 +206,7 @@ void DefaultPeerStorage::deleteUnusedPeer(int32_t delSize) {
for(Peers::reverse_iterator itr = peers.rbegin();
itr != peers.rend(); ++itr) {
const PeerHandle& p = *itr;
- if(p->cuid == 0 && delSize > 0) {
+ if(p->unused() && delSize > 0) {
// Update removedPeerSession******Length
onErasingPeer(p);
delSize--;
@@ -217,10 +217,14 @@ void DefaultPeerStorage::deleteUnusedPeer(int32_t delSize) {
peers = temp;
}
-void DefaultPeerStorage::onErasingPeer(const PeerHandle& peer)
+void DefaultPeerStorage::onErasingPeer(const SharedHandle<Peer>& peer) {}
+
+void DefaultPeerStorage::onReturningPeer(const SharedHandle<Peer>& peer)
{
- removedPeerSessionDownloadLength += peer->getSessionDownloadLength();
- removedPeerSessionUploadLength += peer->getSessionUploadLength();
+ if(peer->isActive()) {
+ removedPeerSessionDownloadLength += peer->getSessionDownloadLength();
+ removedPeerSessionUploadLength += peer->getSessionUploadLength();
+ }
}
void DefaultPeerStorage::returnPeer(const PeerHandle& peer)
@@ -229,6 +233,7 @@ void DefaultPeerStorage::returnPeer(const PeerHandle& peer)
if(itr == peers.end()) {
logger->debug("Cannot find peer %s:%u in PeerStorage.", peer->ipaddr.c_str(), peer->port);
} else {
+ onReturningPeer(peer);
if((*itr)->port == 0) {
onErasingPeer(*itr);
peers.erase(itr);