mirror of https://github.com/aria2/aria2
2010-06-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Renamed member variables * src/DefaultBtMessageDispatcher.cc * src/DefaultBtMessageDispatcher.hpull/1/head
parent
d8d141e5f7
commit
ee08678566
|
@ -1,3 +1,9 @@
|
||||||
|
2010-06-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Renamed member variables
|
||||||
|
* src/DefaultBtMessageDispatcher.cc
|
||||||
|
* src/DefaultBtMessageDispatcher.h
|
||||||
|
|
||||||
2010-06-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-06-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Renamed member variables. Removed member variable peerConnection.
|
Renamed member variables. Removed member variable peerConnection.
|
||||||
|
|
|
@ -60,20 +60,21 @@ namespace aria2 {
|
||||||
|
|
||||||
DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
|
DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
|
||||||
cuid(0),
|
cuid(0),
|
||||||
requestTimeout(0),
|
_requestTimeout(0),
|
||||||
logger(LogFactory::getInstance()) {}
|
_logger(LogFactory::getInstance()) {}
|
||||||
|
|
||||||
DefaultBtMessageDispatcher::~DefaultBtMessageDispatcher()
|
DefaultBtMessageDispatcher::~DefaultBtMessageDispatcher()
|
||||||
{
|
{
|
||||||
if(logger->debug()) {
|
if(_logger->debug()) {
|
||||||
logger->debug("DefaultBtMessageDispatcher::deleted");
|
_logger->debug("DefaultBtMessageDispatcher::deleted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::addMessageToQueue(const BtMessageHandle& btMessage)
|
void DefaultBtMessageDispatcher::addMessageToQueue
|
||||||
|
(const BtMessageHandle& btMessage)
|
||||||
{
|
{
|
||||||
btMessage->onQueued();
|
btMessage->onQueued();
|
||||||
messageQueue.push_back(btMessage);
|
_messageQueue.push_back(btMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::addMessageToQueue
|
void DefaultBtMessageDispatcher::addMessageToQueue
|
||||||
|
@ -87,9 +88,9 @@ void DefaultBtMessageDispatcher::addMessageToQueue
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::sendMessages() {
|
void DefaultBtMessageDispatcher::sendMessages() {
|
||||||
std::vector<SharedHandle<BtMessage> > tempQueue;
|
std::vector<SharedHandle<BtMessage> > tempQueue;
|
||||||
while(!messageQueue.empty()) {
|
while(!_messageQueue.empty()) {
|
||||||
BtMessageHandle msg = messageQueue.front();
|
BtMessageHandle msg = _messageQueue.front();
|
||||||
messageQueue.pop_front();
|
_messageQueue.pop_front();
|
||||||
if(msg->isUploading() && !msg->isSendingInProgress()) {
|
if(msg->isUploading() && !msg->isSendingInProgress()) {
|
||||||
if(_requestGroupMan->doesOverallUploadSpeedExceed() ||
|
if(_requestGroupMan->doesOverallUploadSpeedExceed() ||
|
||||||
_downloadContext->getOwnerRequestGroup()->doesUploadSpeedExceed()) {
|
_downloadContext->getOwnerRequestGroup()->doesUploadSpeedExceed()) {
|
||||||
|
@ -99,33 +100,34 @@ void DefaultBtMessageDispatcher::sendMessages() {
|
||||||
}
|
}
|
||||||
msg->send();
|
msg->send();
|
||||||
if(msg->isUploading()) {
|
if(msg->isUploading()) {
|
||||||
_peerStorage->updateTransferStatFor(peer);
|
_peerStorage->updateTransferStatFor(_peer);
|
||||||
}
|
}
|
||||||
if(msg->isSendingInProgress()) {
|
if(msg->isSendingInProgress()) {
|
||||||
messageQueue.push_front(msg);
|
_messageQueue.push_front(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!tempQueue.empty()) {
|
if(!tempQueue.empty()) {
|
||||||
// Insert pending message to the front, so that message is likely sent in
|
// Insert pending message to the front, so that message is likely sent in
|
||||||
// the same order as it is queued.
|
// the same order as it is queued.
|
||||||
if(!messageQueue.empty() && messageQueue.front()->isSendingInProgress()) {
|
if(!_messageQueue.empty() && _messageQueue.front()->isSendingInProgress()) {
|
||||||
messageQueue.insert(messageQueue.begin()+1,
|
_messageQueue.insert(_messageQueue.begin()+1,
|
||||||
tempQueue.begin(), tempQueue.end());
|
tempQueue.begin(), tempQueue.end());
|
||||||
} else {
|
} else {
|
||||||
messageQueue.insert(messageQueue.begin(),
|
_messageQueue.insert(_messageQueue.begin(),
|
||||||
tempQueue.begin(), tempQueue.end());
|
tempQueue.begin(), tempQueue.end());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cancel sending piece message to peer.
|
// Cancel sending piece message to peer.
|
||||||
void DefaultBtMessageDispatcher::doCancelSendingPieceAction(size_t index, uint32_t begin, size_t length)
|
void DefaultBtMessageDispatcher::doCancelSendingPieceAction
|
||||||
|
(size_t index, uint32_t begin, size_t length)
|
||||||
{
|
{
|
||||||
BtCancelSendingPieceEvent event(index, begin, length);
|
BtCancelSendingPieceEvent event(index, begin, length);
|
||||||
|
|
||||||
std::vector<SharedHandle<BtMessage> > tempQueue
|
std::vector<SharedHandle<BtMessage> > tempQueue
|
||||||
(messageQueue.begin(), messageQueue.end());
|
(_messageQueue.begin(), _messageQueue.end());
|
||||||
|
|
||||||
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
||||||
&BtMessage::onCancelSendingPieceEvent, event);
|
&BtMessage::onCancelSendingPieceEvent, event);
|
||||||
|
@ -167,19 +169,19 @@ void DefaultBtMessageDispatcher::doAbortOutstandingRequestAction
|
||||||
(const SharedHandle<Piece>& piece) {
|
(const SharedHandle<Piece>& piece) {
|
||||||
RequestSlot rs(piece->getIndex(), 0, 0, 0);
|
RequestSlot rs(piece->getIndex(), 0, 0, 0);
|
||||||
std::deque<RequestSlot>::iterator first =
|
std::deque<RequestSlot>::iterator first =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), rs);
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(), rs);
|
||||||
|
|
||||||
rs.setIndex(piece->getIndex()+1);
|
rs.setIndex(piece->getIndex()+1);
|
||||||
std::deque<RequestSlot>::iterator last =
|
std::deque<RequestSlot>::iterator last =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), rs);
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(), rs);
|
||||||
|
|
||||||
std::for_each(first, last, AbortOutstandingRequest(piece, cuid));
|
std::for_each(first, last, AbortOutstandingRequest(piece, cuid));
|
||||||
requestSlots.erase(first, last);
|
_requestSlots.erase(first, last);
|
||||||
|
|
||||||
BtAbortOutstandingRequestEvent event(piece);
|
BtAbortOutstandingRequestEvent event(piece);
|
||||||
|
|
||||||
std::vector<SharedHandle<BtMessage> > tempQueue
|
std::vector<SharedHandle<BtMessage> > tempQueue
|
||||||
(messageQueue.begin(), messageQueue.end());
|
(_messageQueue.begin(), _messageQueue.end());
|
||||||
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
||||||
&BtMessage::onAbortOutstandingRequestEvent, event);
|
&BtMessage::onAbortOutstandingRequestEvent, event);
|
||||||
}
|
}
|
||||||
|
@ -232,12 +234,12 @@ public:
|
||||||
// localhost received choke message from the peer.
|
// localhost received choke message from the peer.
|
||||||
void DefaultBtMessageDispatcher::doChokedAction()
|
void DefaultBtMessageDispatcher::doChokedAction()
|
||||||
{
|
{
|
||||||
std::for_each(requestSlots.begin(), requestSlots.end(),
|
std::for_each(_requestSlots.begin(), _requestSlots.end(),
|
||||||
ProcessChokedRequestSlot(cuid, peer, _pieceStorage));
|
ProcessChokedRequestSlot(cuid, _peer, _pieceStorage));
|
||||||
|
|
||||||
requestSlots.erase(std::remove_if(requestSlots.begin(), requestSlots.end(),
|
_requestSlots.erase(std::remove_if(_requestSlots.begin(), _requestSlots.end(),
|
||||||
FindChokedRequestSlot(peer)),
|
FindChokedRequestSlot(_peer)),
|
||||||
requestSlots.end());
|
_requestSlots.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
// localhost dispatched choke message to the peer.
|
// localhost dispatched choke message to the peer.
|
||||||
|
@ -246,7 +248,7 @@ void DefaultBtMessageDispatcher::doChokingAction()
|
||||||
BtChokingEvent event;
|
BtChokingEvent event;
|
||||||
|
|
||||||
std::vector<SharedHandle<BtMessage> > tempQueue
|
std::vector<SharedHandle<BtMessage> > tempQueue
|
||||||
(messageQueue.begin(), messageQueue.end());
|
(_messageQueue.begin(), _messageQueue.end());
|
||||||
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
|
||||||
&BtMessage::onChokingEvent, event);
|
&BtMessage::onChokingEvent, event);
|
||||||
}
|
}
|
||||||
|
@ -326,25 +328,25 @@ public:
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::checkRequestSlotAndDoNecessaryThing()
|
void DefaultBtMessageDispatcher::checkRequestSlotAndDoNecessaryThing()
|
||||||
{
|
{
|
||||||
std::for_each(requestSlots.begin(), requestSlots.end(),
|
std::for_each(_requestSlots.begin(), _requestSlots.end(),
|
||||||
ProcessStaleRequestSlot(cuid,
|
ProcessStaleRequestSlot(cuid,
|
||||||
peer,
|
_peer,
|
||||||
_pieceStorage,
|
_pieceStorage,
|
||||||
this,
|
this,
|
||||||
messageFactory,
|
_messageFactory,
|
||||||
requestTimeout));
|
_requestTimeout));
|
||||||
requestSlots.erase(std::remove_if(requestSlots.begin(), requestSlots.end(),
|
_requestSlots.erase(std::remove_if(_requestSlots.begin(), _requestSlots.end(),
|
||||||
FindStaleRequestSlot(_pieceStorage,
|
FindStaleRequestSlot(_pieceStorage,
|
||||||
requestTimeout)),
|
_requestTimeout)),
|
||||||
requestSlots.end());
|
_requestSlots.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DefaultBtMessageDispatcher::isSendingInProgress()
|
bool DefaultBtMessageDispatcher::isSendingInProgress()
|
||||||
{
|
{
|
||||||
if(messageQueue.size() > 0) {
|
if(_messageQueue.empty()) {
|
||||||
return messageQueue.front()->isSendingInProgress();
|
|
||||||
} else {
|
|
||||||
return false;
|
return false;
|
||||||
|
} else {
|
||||||
|
return _messageQueue.front()->isSendingInProgress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,23 +362,26 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool DefaultBtMessageDispatcher::isOutstandingRequest(size_t index, size_t blockIndex) {
|
bool DefaultBtMessageDispatcher::isOutstandingRequest
|
||||||
|
(size_t index, size_t blockIndex) {
|
||||||
RequestSlot rs(index, 0, 0, blockIndex);
|
RequestSlot rs(index, 0, 0, blockIndex);
|
||||||
|
|
||||||
std::deque<RequestSlot>::iterator i =
|
std::deque<RequestSlot>::iterator i =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), rs, BlockIndexLess());
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(),
|
||||||
return i != requestSlots.end() &&
|
rs, BlockIndexLess());
|
||||||
|
return i != _requestSlots.end() &&
|
||||||
(*i).getIndex() == index && (*i).getBlockIndex() == blockIndex;
|
(*i).getIndex() == index && (*i).getBlockIndex() == blockIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestSlot
|
RequestSlot
|
||||||
DefaultBtMessageDispatcher::getOutstandingRequest(size_t index, uint32_t begin, size_t length)
|
DefaultBtMessageDispatcher::getOutstandingRequest
|
||||||
|
(size_t index, uint32_t begin, size_t length)
|
||||||
{
|
{
|
||||||
RequestSlot ret;
|
RequestSlot ret;
|
||||||
RequestSlot rs(index, begin, length, 0);
|
RequestSlot rs(index, begin, length, 0);
|
||||||
std::deque<RequestSlot>::iterator i =
|
std::deque<RequestSlot>::iterator i =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), rs);
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(), rs);
|
||||||
if(i != requestSlots.end() && (*i) == rs) {
|
if(i != _requestSlots.end() && (*i) == rs) {
|
||||||
ret = *i;
|
ret = *i;
|
||||||
} else {
|
} else {
|
||||||
ret = RequestSlot::nullSlot;
|
ret = RequestSlot::nullSlot;
|
||||||
|
@ -384,34 +389,36 @@ DefaultBtMessageDispatcher::getOutstandingRequest(size_t index, uint32_t begin,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::removeOutstandingRequest(const RequestSlot& slot)
|
void DefaultBtMessageDispatcher::removeOutstandingRequest
|
||||||
|
(const RequestSlot& slot)
|
||||||
{
|
{
|
||||||
std::deque<RequestSlot>::iterator i =
|
std::deque<RequestSlot>::iterator i =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), slot);
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(), slot);
|
||||||
if(i != requestSlots.end() && (*i) == slot) {
|
if(i != _requestSlots.end() && (*i) == slot) {
|
||||||
AbortOutstandingRequest(slot.getPiece(), cuid)(*i);
|
AbortOutstandingRequest(slot.getPiece(), cuid)(*i);
|
||||||
requestSlots.erase(i);
|
_requestSlots.erase(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::addOutstandingRequest(const RequestSlot& slot)
|
void DefaultBtMessageDispatcher::addOutstandingRequest
|
||||||
|
(const RequestSlot& slot)
|
||||||
{
|
{
|
||||||
std::deque<RequestSlot>::iterator i =
|
std::deque<RequestSlot>::iterator i =
|
||||||
std::lower_bound(requestSlots.begin(), requestSlots.end(), slot);
|
std::lower_bound(_requestSlots.begin(), _requestSlots.end(), slot);
|
||||||
if(i == requestSlots.end() || (*i) != slot) {
|
if(i == _requestSlots.end() || (*i) != slot) {
|
||||||
requestSlots.insert(i, slot);
|
_requestSlots.insert(i, slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DefaultBtMessageDispatcher::countOutstandingUpload()
|
size_t DefaultBtMessageDispatcher::countOutstandingUpload()
|
||||||
{
|
{
|
||||||
return std::count_if(messageQueue.begin(), messageQueue.end(),
|
return std::count_if(_messageQueue.begin(), _messageQueue.end(),
|
||||||
mem_fun_sh(&BtMessage::isUploading));
|
mem_fun_sh(&BtMessage::isUploading));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::setPeer(const SharedHandle<Peer>& peer)
|
void DefaultBtMessageDispatcher::setPeer(const SharedHandle<Peer>& peer)
|
||||||
{
|
{
|
||||||
this->peer = peer;
|
_peer = peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::setDownloadContext
|
void DefaultBtMessageDispatcher::setDownloadContext
|
||||||
|
@ -432,9 +439,10 @@ void DefaultBtMessageDispatcher::setPeerStorage
|
||||||
_peerStorage = peerStorage;
|
_peerStorage = peerStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::setBtMessageFactory(const WeakHandle<BtMessageFactory>& factory)
|
void DefaultBtMessageDispatcher::setBtMessageFactory
|
||||||
|
(const WeakHandle<BtMessageFactory>& factory)
|
||||||
{
|
{
|
||||||
this->messageFactory = factory;
|
_messageFactory = factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultBtMessageDispatcher::setRequestGroupMan
|
void DefaultBtMessageDispatcher::setRequestGroupMan
|
||||||
|
|
|
@ -57,16 +57,16 @@ class RequestGroupMan;
|
||||||
class DefaultBtMessageDispatcher : public BtMessageDispatcher {
|
class DefaultBtMessageDispatcher : public BtMessageDispatcher {
|
||||||
private:
|
private:
|
||||||
cuid_t cuid;
|
cuid_t cuid;
|
||||||
std::deque<SharedHandle<BtMessage> > messageQueue;
|
std::deque<SharedHandle<BtMessage> > _messageQueue;
|
||||||
std::deque<RequestSlot> requestSlots;
|
std::deque<RequestSlot> _requestSlots;
|
||||||
SharedHandle<DownloadContext> _downloadContext;
|
SharedHandle<DownloadContext> _downloadContext;
|
||||||
SharedHandle<PeerStorage> _peerStorage;
|
SharedHandle<PeerStorage> _peerStorage;
|
||||||
SharedHandle<PieceStorage> _pieceStorage;
|
SharedHandle<PieceStorage> _pieceStorage;
|
||||||
WeakHandle<BtMessageFactory> messageFactory;
|
WeakHandle<BtMessageFactory> _messageFactory;
|
||||||
SharedHandle<Peer> peer;
|
SharedHandle<Peer> _peer;
|
||||||
WeakHandle<RequestGroupMan> _requestGroupMan;
|
WeakHandle<RequestGroupMan> _requestGroupMan;
|
||||||
time_t requestTimeout;
|
time_t _requestTimeout;
|
||||||
Logger* logger;
|
Logger* _logger;
|
||||||
public:
|
public:
|
||||||
DefaultBtMessageDispatcher();
|
DefaultBtMessageDispatcher();
|
||||||
|
|
||||||
|
@ -94,12 +94,12 @@ public:
|
||||||
virtual bool isSendingInProgress();
|
virtual bool isSendingInProgress();
|
||||||
|
|
||||||
virtual size_t countMessageInQueue() {
|
virtual size_t countMessageInQueue() {
|
||||||
return messageQueue.size();
|
return _messageQueue.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual size_t countOutstandingRequest()
|
virtual size_t countOutstandingRequest()
|
||||||
{
|
{
|
||||||
return requestSlots.size();
|
return _requestSlots.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool isOutstandingRequest(size_t index, size_t blockIndex);
|
virtual bool isOutstandingRequest(size_t index, size_t blockIndex);
|
||||||
|
@ -114,12 +114,12 @@ public:
|
||||||
|
|
||||||
const std::deque<SharedHandle<BtMessage> >& getMessageQueue() const
|
const std::deque<SharedHandle<BtMessage> >& getMessageQueue() const
|
||||||
{
|
{
|
||||||
return messageQueue;
|
return _messageQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::deque<RequestSlot>& getRequestSlots() const
|
const std::deque<RequestSlot>& getRequestSlots() const
|
||||||
{
|
{
|
||||||
return requestSlots;
|
return _requestSlots;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPeer(const SharedHandle<Peer>& peer);
|
void setPeer(const SharedHandle<Peer>& peer);
|
||||||
|
@ -140,7 +140,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setRequestTimeout(time_t requestTimeout) {
|
void setRequestTimeout(time_t requestTimeout) {
|
||||||
this->requestTimeout = requestTimeout;
|
_requestTimeout = requestTimeout;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue