From c83a8a951cce9b7ed541c293993f708f720bf28d Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Thu, 19 Jun 2014 15:38:02 -0700 Subject: Finishing up basic curl integration and adding a basic DownloadTask. --- includes/CurlTask.h | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'includes/CurlTask.h') diff --git a/includes/CurlTask.h b/includes/CurlTask.h index 0aa62a0..41243ec 100644 --- a/includes/CurlTask.h +++ b/includes/CurlTask.h @@ -7,20 +7,45 @@ namespace Balau { class CurlTask : public StacklessTask { -public: - CurlTask(); + public: + CurlTask(); + ~CurlTask(); friend class TaskMan; protected: CURL * m_curlHandle; -private: - void curlDone(CURLcode result); + void registerCurlHandle() { getTaskMan()->registerCurlHandle(this); } + void unregisterCurlHandle() { getTaskMan()->unregisterCurlHandle(this); } + private: + virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) { return size * nmemb; } + virtual size_t readFunction(void * ptr, size_t size, size_t nmemb) { return CURL_READFUNC_ABORT; } + virtual int debugFunction(curl_infotype info, char * str, size_t str_len) { return 0; } + virtual void curlDone(CURLcode result) { } static size_t writeFunctionStatic(char * ptr, size_t size, size_t nmemb, void * userdata); - virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) { return size * nmemb; } static size_t readFunctionStatic(void * ptr, size_t size, size_t nmemb, void * userdata); - virtual size_t readFunction(void * ptr, size_t size, size_t nmemb) { return CURL_READFUNC_ABORT; } static int debugFunctionStatic(CURL * easy, curl_infotype info, char * str, size_t str_len, void * userdata); - virtual int debugFunction(curl_infotype info, char * str, size_t str_len) { return 0; } +}; + +class DownloadTask : public CurlTask { + public: + DownloadTask(const String & url); + const String & getData() const { return m_data; } + bool isDone() { return m_done; } + long responseCode() { return m_responseCode; } + + protected: + String m_data; + CURLcode m_curlResult; + long m_responseCode; + + private: + virtual const char * getName() const override { return m_name.to_charp(); } + virtual void Do() override; + virtual void curlDone(CURLcode result) override; + virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) override { m_data += ptr; return size * nmemb; } + String m_name; + Events::Custom m_evt; + bool m_done = false; }; }; -- cgit v1.2.3