/* */ #include "DHTPingTask.h" #include "DHTMessage.h" #include "DHTMessageFactory.h" #include "DHTMessageDispatcher.h" #include "DHTNode.h" #include "DHTConstants.h" #include "DHTPingReplyMessageCallback.h" #include "DHTQueryMessage.h" #include "DHTPingMessage.h" namespace aria2 { DHTPingTask::DHTPingTask(const std::shared_ptr& remoteNode, int numMaxRetry) : remoteNode_(remoteNode), numMaxRetry_(numMaxRetry), numRetry_(0), pingSuccessful_(false), timeout_(DHT_MESSAGE_TIMEOUT) { } DHTPingTask::~DHTPingTask() = default; void DHTPingTask::addMessage() { getMessageDispatcher()->addMessageToQueue( getMessageFactory()->createPingMessage(remoteNode_), timeout_, make_unique>(this)); } void DHTPingTask::startup() { addMessage(); } void DHTPingTask::onReceived(const DHTPingReplyMessage* message) { pingSuccessful_ = true; setFinished(true); } void DHTPingTask::onTimeout(const std::shared_ptr& node) { ++numRetry_; if (numRetry_ >= numMaxRetry_) { pingSuccessful_ = false; setFinished(true); } else { addMessage(); } } bool DHTPingTask::isPingSuccessful() const { return pingSuccessful_; } } // namespace aria2