/* */ #ifndef _D_DOWNLOAD_ENGINE_H_ #define _D_DOWNLOAD_ENGINE_H_ #include "Command.h" #include "Socket.h" #include "SegmentMan.h" #include "common.h" #include "Logger.h" #include "Option.h" typedef deque Sockets; typedef deque Commands; typedef multimap SockCmdMap; class DownloadEngine { private: void waitData(Sockets& activeSockets); Sockets rsockets; Sockets wsockets; SockCmdMap sockCmdMap; void shortSleep() const; bool addSocket(Sockets& sockets, Socket* socket, Command* command); bool deleteSocket(Sockets& sockets, Socket* socket); protected: const Logger* logger; virtual void initStatistics() = 0; virtual void calculateStatistics() = 0; virtual void onEndOfRun() = 0; virtual void afterEachIteration() {} public: bool noWait; Commands commands; SegmentMan* segmentMan; const Option* option; DownloadEngine(); virtual ~DownloadEngine(); void run(); void cleanQueue(); bool addSocketForReadCheck(Socket* socket, Command* command); bool deleteSocketForReadCheck(Socket* socket); bool addSocketForWriteCheck(Socket* socket, Command* command); bool deleteSocketForWriteCheck(Socket* socket); }; #endif // _D_DOWNLOAD_ENGINE_H_