/* */ #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_; time_t 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); virtual std::shared_ptr createNodeLookupTask(const unsigned char* targetID); virtual std::shared_ptr createBucketRefreshTask(); virtual std::shared_ptr createPeerLookupTask(const std::shared_ptr& ctx, uint16_t tcpPort, const std::shared_ptr& peerStorage); virtual std::shared_ptr createPeerAnnounceTask(const unsigned char* infoHash); virtual std::shared_ptr createReplaceNodeTask(const std::shared_ptr& bucket, const std::shared_ptr& newNode); 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(time_t timeout) { timeout_ = timeout; } }; } // namespace aria2 #endif // D_DHT_TASK_FACTORY_IMPL_H