diff options
Diffstat (limited to 'client/DownloadClient.h')
-rw-r--r-- | client/DownloadClient.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/client/DownloadClient.h b/client/DownloadClient.h new file mode 100644 index 0000000..5b75c2c --- /dev/null +++ b/client/DownloadClient.h @@ -0,0 +1,95 @@ + + +#ifndef DOWNLOAD_CLIENT_H +#define DOWNLOAD_CLIENT_H + +#include <string> +#include <vector> +#include <QObject> +#include "SslClient.h" + +using std::pair; +using std::string; +using std::vector; + +class QFile; + +class DownloadClient: public SslClient +{ +Q_OBJECT + +public: + /** + * @brief Initialize new DownloadClient instance + */ + DownloadClient(); + + /** + * @brief Initialize new DownloadClient instance + * @param addr server address or hostname to connect to + */ + DownloadClient(QString addr); + + /** + * @brief Download file from server + * @param file file path on client machine + */ + void Download(const string &file); + + /** + * @brief Download file from server + * @param file pair of file name and it's md5 hash value + */ + void Download(const pair<string, string> &file); + + /** + * @brief Download list of files + * @param files associative array of file names and it's md5 hashes + * @note this is designated method among all + * @todo It seems that std::map isn't best choice for this purpose + * it's quite unsuitable to iterate through( + */ + void Download(const vector<pair<string, string> > &files); + +signals: + /** + * @brief This signal is emitted when all files have been downloaded + */ + void downloadFinished(); + +private slots: + void FileDataRecieved(SslClient::RequestType &type, QByteArray &confdata); + +private: + /** + * @brief size of file data fragment + */ + static const int FRAGMENT_SIZE = 4096; + + /** + * @brief indicates that program is downloading file(s) right now + */ + bool isDownloading; + + /** + * @brief name of file that is being downloaded + */ + QFile *current; + + /** + * @brief index of file that is being downloaded + */ + int currentId; + + /** + * @brief List of file to + */ + vector<pair<string, string> > files; + + /** + * @brief start file-by-file downloading process + */ + void DoDownload(); +}; + +#endif |