/* */ #ifndef D_COMMAND_H #define D_COMMAND_H #include "common.h" namespace aria2 { typedef int64_t cuid_t; class Command { public: enum STATUS { STATUS_ALL, STATUS_INACTIVE, STATUS_ACTIVE, STATUS_REALTIME, STATUS_ONESHOT_REALTIME }; private: cuid_t cuid_; STATUS status_; bool readEvent_; bool writeEvent_; bool errorEvent_; bool hupEvent_; protected: bool readEventEnabled() const { return readEvent_; } bool writeEventEnabled() const { return writeEvent_; } bool errorEventEnabled() const { return errorEvent_; } bool hupEventEnabled() const { return hupEvent_; } public: Command(cuid_t cuid); virtual ~Command() = default; virtual bool execute() = 0; cuid_t getCuid() const { return cuid_; } void setStatusActive() { status_ = STATUS_ACTIVE; } void setStatusInactive() { status_ = STATUS_INACTIVE; } void setStatusRealtime() { status_ = STATUS_REALTIME; } void setStatus(STATUS status); bool statusMatch(Command::STATUS statusFilter) const { return statusFilter <= status_; } void transitStatus(); void readEventReceived(); void writeEventReceived(); void errorEventReceived(); void hupEventReceived(); void clearIOEvents(); }; } // namespace aria2 #endif // D_COMMAND_H