Ivan Safrin 13 лет назад
Родитель
Сommit
66944e6693

+ 46 - 0
Modules/Contents/Curl/PolycodeDownloader.cpp

@@ -0,0 +1,46 @@
+
+#include "PolycodeDownloader.h"
+
+size_t DownloaderCallback(char *ptr, size_t size, size_t nmemb, void *userdata) {
+
+	PolycodeDownloader *downloader = (PolycodeDownloader*) userdata;
+	
+	size_t newSize = downloader->size + (size*nmemb);
+	downloader->data = (char*)realloc((void*)downloader->data, newSize);
+	
+	memcpy(downloader->data+downloader->size, ptr, (size*nmemb));
+	
+	downloader->size = newSize;	
+	return size * nmemb;
+}
+
+String PolycodeDownloader::getDataAsString() {	
+	char *ndata = (char*)malloc(size);
+	memcpy(ndata, data, size);
+	ndata[size-1] = '\0';
+	String ret = String(ndata);
+	free(ndata);
+	return ret;
+}
+		
+PolycodeDownloader::PolycodeDownloader(String url) {
+	
+	data = (char*)malloc(0);
+	size = 0;
+	
+	curl = curl_easy_init();
+		
+	curl_easy_setopt(curl, CURLOPT_URL, url.c_str());	
+	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, DownloaderCallback);
+	curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
+			
+	CURLcode curl_res = curl_easy_perform(curl);
+	
+	curl_easy_cleanup(curl);	
+	
+	dispatchEvent(new Event(Event::COMPLETE_EVENT), Event::COMPLETE_EVENT);
+}
+
+PolycodeDownloader::~PolycodeDownloader() {
+	free(data);
+}

+ 20 - 0
Modules/Contents/Curl/PolycodeDownloader.h

@@ -0,0 +1,20 @@
+
+#include <Polycode.h>
+#include <curl/curl.h>
+
+using namespace Polycode;
+
+class PolycodeDownloader : public EventDispatcher {
+	public:
+		PolycodeDownloader(String url);
+		~PolycodeDownloader();		
+		
+		String getDataAsString();
+		
+		char *data;
+		size_t size;
+				
+	protected:
+		
+		CURL *curl;
+};