/* */ #ifndef D_DHT_MESSAGE_TRACKER_ENTRY_H #define D_DHT_MESSAGE_TRACKER_ENTRY_H #include "common.h" #include #include #include "DHTConstants.h" #include "TimerA2.h" namespace aria2 { class DHTNode; class DHTMessage; class DHTMessageCallback; class DHTMessageTrackerEntry { private: std::shared_ptr targetNode_; std::string transactionID_; std::string messageType_; std::unique_ptr callback_; Timer dispatchedTime_; std::chrono::seconds timeout_; public: DHTMessageTrackerEntry(std::shared_ptr targetNode, std::string transactionID, std::string messageType, std::chrono::seconds timeout, std::unique_ptr callback = std::unique_ptr{}); bool isTimeout() const; void extendTimeout(); bool match(const std::string& transactionID, const std::string& ipaddr, uint16_t port) const; const std::shared_ptr& getTargetNode() const; const std::string& getMessageType() const; const std::unique_ptr& getCallback() const; std::unique_ptr popCallback(); Timer::Clock::duration getElapsed() const; }; } // namespace aria2 #endif // D_DHT_MESSAGE_TRACKER_ENTRY_H