/* */ #include "DHTBucketRefreshTask.h" #include "DHTBucket.h" #include "DHTRoutingTable.h" #include "DHTNodeLookupTask.h" #include "DHTTaskQueue.h" #include "DHTNode.h" #include "DHTNodeLookupEntry.h" #include "Util.h" #include "Logger.h" DHTBucketRefreshTask::DHTBucketRefreshTask() {} DHTBucketRefreshTask::~DHTBucketRefreshTask() {} void DHTBucketRefreshTask::startup() { DHTBuckets buckets = _routingTable->getBuckets(); for(DHTBuckets::iterator i = buckets.begin(); i != buckets.end(); ++i) { if((*i)->needsRefresh()) { (*i)->notifyUpdate(); unsigned char targetID[DHT_ID_LENGTH]; (*i)->getRandomNodeID(targetID); SharedHandle task = new DHTNodeLookupTask(targetID); task->setRoutingTable(_routingTable); task->setMessageDispatcher(_dispatcher); task->setMessageFactory(_factory); task->setTaskQueue(_taskQueue); task->setLocalNode(_localNode); _logger->info("Dispating bucket refresh. targetID=%s", Util::toHex(targetID, DHT_ID_LENGTH).c_str()); _taskQueue->addPeriodicTask1(task); } } _finished = true; }