/* */ #ifndef D_DHT_MESSAGE_TRACKER_H #define D_DHT_MESSAGE_TRACKER_H #include "common.h" #include #include #include #include "a2time.h" #include "ValueBase.h" namespace aria2 { class DHTMessage; class DHTResponseMessage; class DHTMessageCallback; class DHTRoutingTable; class DHTMessageFactory; class DHTMessageTrackerEntry; class DHTMessageTracker { private: std::deque> entries_; DHTRoutingTable* routingTable_; DHTMessageFactory* factory_; public: DHTMessageTracker(); void addMessage(DHTMessage* message, std::chrono::seconds timeout, std::unique_ptr callback = std::unique_ptr{}); std::pair, std::unique_ptr> messageArrived(const Dict* dict, const std::string& ipaddr, uint16_t port); void handleTimeout(); // Made public so that unnamed functor can access this void handleTimeoutEntry(DHTMessageTrackerEntry* entry); // // For unittest only const DHTMessageTrackerEntry* getEntryFor(const DHTMessage* message) const; size_t countEntry() const; void setRoutingTable(DHTRoutingTable* routingTable); void setMessageFactory(DHTMessageFactory* factory); }; } // namespace aria2 #endif // D_DHT_MESSAGE_TRACKER_H