diff options
Diffstat (limited to 'src/client/requestbroker/APIRequest.cpp')
| -rw-r--r-- | src/client/requestbroker/APIRequest.cpp | 77 |
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 |
