/* */ #include "DHTInteractionCommand.h" #include "DownloadEngine.h" #include "RecoverableException.h" #include "DHTMessageDispatcher.h" #include "DHTMessageReceiver.h" #include "DHTTaskQueue.h" #include "DHTMessage.h" #include "Socket.h" #include "message.h" #include "RequestGroupMan.h" #include "Logger.h" #include "DHTMessageCallback.h" #include "DHTNode.h" #include "FileEntry.h" namespace aria2 { DHTInteractionCommand::DHTInteractionCommand(cuid_t cuid, DownloadEngine* e): Command(cuid), _e(e) {} DHTInteractionCommand::~DHTInteractionCommand() { disableReadCheckSocket(_readCheckSocket); } void DHTInteractionCommand::setReadCheckSocket(const SocketHandle& socket) { _readCheckSocket = socket; _e->addSocketForReadCheck(socket, this); } void DHTInteractionCommand::disableReadCheckSocket(const SocketHandle& socket) { _e->deleteSocketForReadCheck(socket, this); } bool DHTInteractionCommand::execute() { if(_e->_requestGroupMan->downloadFinished() || _e->isHaltRequested()) { return true; } _taskQueue->executeTask(); for(size_t i = 0; i < 20; ++i) { SharedHandle m = _receiver->receiveMessage(); if(m.isNull()) { break; } } _receiver->handleTimeout(); try { _dispatcher->sendMessages(); } catch(RecoverableException& e) { logger->error(EX_EXCEPTION_CAUGHT, e); } _e->commands.push_back(this); return false; } void DHTInteractionCommand::setMessageDispatcher(const SharedHandle& dispatcher) { _dispatcher = dispatcher; } void DHTInteractionCommand::setMessageReceiver(const SharedHandle& receiver) { _receiver = receiver; } void DHTInteractionCommand::setTaskQueue(const SharedHandle& taskQueue) { _taskQueue = taskQueue; } } // namespace aria2