/* */ #include "DHTPingTask.h" #include "DHTMessageCallbackImpl.h" #include "DHTMessage.h" #include "DHTMessageFactory.h" #include "DHTMessageDispatcher.h" #include "DHTNode.h" #include "DHTConstants.h" namespace aria2 { DHTPingTask::DHTPingTask(const SharedHandle& remoteNode, size_t numMaxRetry): _remoteNode(remoteNode), _numMaxRetry(numMaxRetry), _numRetry(0), _pingSuccessful(false), _timeout(DHT_MESSAGE_TIMEOUT) {} DHTPingTask::~DHTPingTask() {} void DHTPingTask::startup() { SharedHandle m = _factory->createPingMessage(_remoteNode); WeakHandle listener(this); SharedHandle callback(new DHTMessageCallbackImpl(listener)); _dispatcher->addMessageToQueue(m, _timeout, callback); } void DHTPingTask::onReceived(const SharedHandle& message) { _pingSuccessful = true; _finished = true; } void DHTPingTask::onTimeout(const SharedHandle& node) { ++_numRetry; if(_numRetry >= _numMaxRetry) { _pingSuccessful = false; _finished = true; } else { SharedHandle m = _factory->createPingMessage(_remoteNode); WeakHandle listener(this); SharedHandle callback(new DHTMessageCallbackImpl(listener)); _dispatcher->addMessageToQueue(m, _timeout, callback); } } bool DHTPingTask::isPingSuccessful() const { return _pingSuccessful; } } // namespace aria2