/* */ #include "ActivePeerConnectionCommand.h" #include "PeerInitiateConnectionCommand.h" #include "CUIDCounter.h" bool ActivePeerConnectionCommand::execute() { if(btRuntime->isHalt()) { return true; } if(!pieceStorage->downloadFinished() && checkPoint.elapsed(interval)) { checkPoint.reset(); TransferStat tstat = peerStorage->calculateStat(); if(tstat.getDownloadSpeed() < _lowestSpeedLimit) { for(int i = 0; i < _numNewConnection && peerStorage->isPeerAvailable(); ++i) { PeerHandle peer = peerStorage->getUnusedPeer(); connectToPeer(peer); } } } e->commands.push_back(this); return false; } void ActivePeerConnectionCommand::connectToPeer(const PeerHandle& peer) { if(peer.isNull()) { return; } peer->cuid = CUIDCounterSingletonHolder::instance()->newID(); PeerInitiateConnectionCommand* command = new PeerInitiateConnectionCommand(peer->cuid, peer, e, btContext); e->commands.push_back(command); logger->info("CUID#%d - Active Connect to the peer %s", cuid, peer->ipaddr.c_str()); }