/* */ #ifndef D_DHT_TASK_FACTORY_IMPL_H #define D_DHT_TASK_FACTORY_IMPL_H #include "DHTTaskFactory.h" #include "a2time.h" namespace aria2 { class DHTNode; class DHTRoutingTable; class DHTMessageDispatcher; class DHTMessageFactory; class DHTTaskQueue; class DHTAbstractTask; class DHTTaskFactoryImpl : public DHTTaskFactory { private: std::shared_ptr localNode_; DHTRoutingTable* routingTable_; DHTMessageDispatcher* dispatcher_; DHTMessageFactory* factory_; DHTTaskQueue* taskQueue_; std::chrono::seconds timeout_; void setCommonProperty(const std::shared_ptr& task); public: DHTTaskFactoryImpl(); virtual ~DHTTaskFactoryImpl(); virtual std::shared_ptr createPingTask(const std::shared_ptr& remoteNode, int numRetry = 0) CXX11_OVERRIDE; virtual std::shared_ptr createNodeLookupTask(const unsigned char* targetID) CXX11_OVERRIDE; virtual std::shared_ptr createBucketRefreshTask() CXX11_OVERRIDE; virtual std::shared_ptr createPeerLookupTask( const std::shared_ptr& ctx, uint16_t tcpPort, const std::shared_ptr& peerStorage) CXX11_OVERRIDE; virtual std::shared_ptr createPeerAnnounceTask(const unsigned char* infoHash) CXX11_OVERRIDE; virtual std::shared_ptr createReplaceNodeTask(const std::shared_ptr& bucket, const std::shared_ptr& newNode) CXX11_OVERRIDE; void setRoutingTable(DHTRoutingTable* routingTable); void setMessageDispatcher(DHTMessageDispatcher* dispatcher); void setMessageFactory(DHTMessageFactory* factory); void setTaskQueue(DHTTaskQueue* taskQueue); void setLocalNode(const std::shared_ptr& localNode); void setTimeout(std::chrono::seconds timeout) { timeout_ = std::move(timeout); } }; } // namespace aria2 #endif // D_DHT_TASK_FACTORY_IMPL_H