summaryrefslogtreecommitdiff
path: root/src/client/requestbroker/APIRequest.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-03-16 17:45:18 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-03-16 17:45:18 (GMT)
commitf05044ab68e51ce9c374f6af09284051efcda449 (patch)
tree6ae35ed5f6f3395593fc0d2c90780d8162f302e7 /src/client/requestbroker/APIRequest.cpp
parentd383d6d7e5e1d3ca0856c02ebbcea5e9b8b2ff4e (diff)
downloadpowder-f05044ab68e51ce9c374f6af09284051efcda449.zip
powder-f05044ab68e51ce9c374f6af09284051efcda449.tar.gz
APIRequest, Aync methods for client, Profile edit/viewer (WIP)
Diffstat (limited to 'src/client/requestbroker/APIRequest.cpp')
-rw-r--r--src/client/requestbroker/APIRequest.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/client/requestbroker/APIRequest.cpp b/src/client/requestbroker/APIRequest.cpp
new file mode 100644
index 0000000..71d683f
--- /dev/null
+++ b/src/client/requestbroker/APIRequest.cpp
@@ -0,0 +1,77 @@
+#include <iostream>
+#include <typeinfo>
+#include <cstdlib>
+#include "APIRequest.h"
+#include "client/HTTP.h"
+#include "APIResultParser.h"
+
+APIRequest::APIRequest(std::string url, APIResultParser * parser, ListenerHandle listener):
+ RequestBroker::Request(API, listener)
+{
+ HTTPContext = NULL;
+ Parser = parser;
+ URL = url;
+}
+
+RequestBroker::ProcessResponse APIRequest::Process(RequestBroker & rb)
+{
+ if(HTTPContext)
+ {
+ if(http_async_req_status(HTTPContext))
+ {
+ char * data;
+ int status, data_size;
+ data = http_async_req_stop(HTTPContext, &status, &data_size);
+
+ if (status == 200 && data)
+ {
+ void * resultObject = Parser->ProcessResponse((unsigned char *)data, data_size);
+ free(data);
+
+ if(resultObject)
+ {
+ this->ResultObject = resultObject;
+ rb.requestComplete(this);
+ return RequestBroker::Finished;
+ }
+ else
+ {
+ std::cout << typeid(*this).name() << " Request for " << URL << " could not be parsed" << status << std::endl;
+ return RequestBroker::Failed;
+ }
+ }
+ else
+ {
+//#ifdef DEBUG
+ std::cout << typeid(*this).name() << " Request for " << URL << " failed with status " << status << std::endl;
+//#endif
+ if(data)
+ free(data);
+
+ return RequestBroker::Failed;
+ }
+ }
+ }
+ else
+ {
+ std::cout << typeid(*this).name() << " New Request for " << URL << std::endl;
+ HTTPContext = http_async_req_start(NULL, (char *)URL.c_str(), NULL, 0, 0);
+ //RequestTime = time(NULL);
+ }
+ return RequestBroker::OK;
+}
+
+APIRequest::~APIRequest()
+{
+ delete Parser;
+}
+
+void APIRequest::Cleanup()
+{
+ Request::Cleanup();
+ if(ResultObject)
+ {
+ Parser->Cleanup(ResultObject);
+ ResultObject = NULL;
+ }
+} \ No newline at end of file