/* */ #ifndef _D_PEER_STAT_H_ #define _D_PEER_STAT_H_ #include "common.h" #include "SpeedCalc.h" #include "SharedHandle.h" namespace aria2 { class PeerStat { public: enum STATUS { IDLE, ACTIVE, REQUEST_IDLE, }; private: int32_t cuid; SpeedCalc downloadSpeed; SpeedCalc uploadSpeed; Time downloadStartTime; PeerStat::STATUS status; public: PeerStat(int32_t cuid = 0):cuid(cuid), status(PeerStat::IDLE) {} ~PeerStat() {} /** * Returns current download speed in byte per sec. */ int32_t calculateDownloadSpeed() { return downloadSpeed.calculateSpeed(); } int32_t calculateDownloadSpeed(const struct timeval& now) { return downloadSpeed.calculateSpeed(now); } int32_t calculateUploadSpeed() { return uploadSpeed.calculateSpeed(); } int32_t calculateUploadSpeed(const struct timeval& now) { return uploadSpeed.calculateSpeed(now); } void updateDownloadLength(int32_t bytes) { downloadSpeed.update(bytes); } void updateUploadLength(int32_t bytes) { uploadSpeed.update(bytes); } int32_t getMaxDownloadSpeed() const { return downloadSpeed.getMaxSpeed(); } int32_t getMaxUploadSpeed() const { return uploadSpeed.getMaxSpeed(); } int32_t getAvgDownloadSpeed() const { return downloadSpeed.getAvgSpeed(); } int32_t getAvgUploadSpeed() const { return uploadSpeed.getAvgSpeed(); } void reset() { downloadSpeed.reset(); uploadSpeed.reset(); downloadStartTime.reset(); status = PeerStat::IDLE; } void downloadStart() { reset(); status = PeerStat::ACTIVE; } void downloadStop() { status = PeerStat::IDLE; } void requestIdle() { status = PeerStat::REQUEST_IDLE; } const Time& getDownloadStartTime() const { return downloadStartTime; } PeerStat::STATUS getStatus() const { return status; } int32_t getCuid() const { return cuid; } }; typedef SharedHandle PeerStatHandle; } // namespace aria2 #endif // _D_PEER_STAT_H_