/* */ #ifndef D_PEER_ABSTRACT_COMMAND_H #define D_PEER_ABSTRACT_COMMAND_H #include "Command.h" #include #include "TimerA2.h" namespace aria2 { class DownloadEngine; class Exception; class Peer; class SocketCore; class PeerAbstractCommand : public Command { private: Timer checkPoint_; std::chrono::seconds timeout_; DownloadEngine* e_; std::shared_ptr socket_; std::shared_ptr peer_; bool checkSocketIsReadable_; bool checkSocketIsWritable_; std::shared_ptr readCheckTarget_; std::shared_ptr writeCheckTarget_; bool noCheck_; protected: DownloadEngine* getDownloadEngine() const { return e_; } const std::shared_ptr& getSocket() const { return socket_; } void createSocket(); const std::shared_ptr& getPeer() const { return peer_; } void setTimeout(std::chrono::seconds timeout) { timeout_ = std::move(timeout); } virtual bool prepareForNextPeer(time_t wait); virtual void onAbort(){}; // This function is called when DownloadFailureException is caught right after // the invocation of onAbort(). virtual void onFailure(const Exception& err){}; virtual bool exitBeforeExecute() = 0; virtual bool executeInternal() = 0; void setReadCheckSocket(const std::shared_ptr& socket); void setWriteCheckSocket(const std::shared_ptr& socket); void disableReadCheckSocket(); void disableWriteCheckSocket(); void setNoCheck(bool check); void updateKeepAlive(); void addCommandSelf(); public: PeerAbstractCommand( cuid_t cuid, const std::shared_ptr& peer, DownloadEngine* e, const std::shared_ptr& s = std::shared_ptr()); virtual ~PeerAbstractCommand(); virtual bool execute() CXX11_OVERRIDE; }; } // namespace aria2 #endif // D_PEER_ABSTRACT_COMMAND_H