diff --git a/CMakeLists.txt b/CMakeLists.txt index d79df97..c279293 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 14) add_subdirectory(external/curl) add_subdirectory(external/jsoncpp) -add_executable(TradeSim main.cpp src/Market.cpp src/Market.h src/Exchange.cpp src/Exchange.h src/Trader.h src/TradeTracker.cpp src/TradeTracker.h src/Binance.cpp src/Binance.h src/Wallet.cpp src/Wallet.h src/Transaction.cpp src/Transaction.h) +add_executable(TradeSim main.cpp src/Market.cpp src/Market.h src/Exchange.cpp src/Exchange.h src/Trader.h src/TradeTracker.cpp src/TradeTracker.h src/Binance.cpp src/Binance.h src/Wallet.cpp src/Wallet.h src/Transaction.cpp src/Transaction.h src/WebAPI.cpp src/WebAPI.h) target_link_libraries(TradeSim libcurl) target_link_libraries(TradeSim jsoncpp_lib) include_directories(${CURL_INCLUDE_DIR}) diff --git a/docs/class-diagram.png b/docs/class-diagram.png index 4f96524..68529c4 100644 Binary files a/docs/class-diagram.png and b/docs/class-diagram.png differ diff --git a/docs/dev.org b/docs/dev.org index 7626300..68a1386 100644 --- a/docs/dev.org +++ b/docs/dev.org @@ -87,6 +87,14 @@ class Transaction{ -double amount -double price } + +WebAPI <... Binance + +class WebAPI{ + -String baseURL + +WebAPI(baseURL: String) + +request(path: String): JsonValue +} @enduml #+END_SRC diff --git a/src/WebAPI.cpp b/src/WebAPI.cpp new file mode 100644 index 0000000..09543e1 --- /dev/null +++ b/src/WebAPI.cpp @@ -0,0 +1,47 @@ +#include "WebAPI.h" + + + +WebAPI::WebAPI(const std::string &baseUrl) : baseURL(baseUrl) {} + +Json::Value WebAPI::request(const std::string &path) { + CURL *curl; + CURLcode res; + + curl = curl_easy_init(); + if(curl) { + std::string s; + std::string URL = baseURL+path; + curl_easy_setopt(curl, CURLOPT_URL, URL.c_str()); + + + curl_easy_setopt(curl, CURLOPT_HTTPGET, 1); + + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s); + + res = curl_easy_perform(curl); + + if(res != CURLE_OK) + fprintf(stderr, "curl_easy_perform() failed: %s\n", + curl_easy_strerror(res)); + Json::Value root; + JSONCPP_STRING err; + Json::CharReaderBuilder builder; + const std::unique_ptr reader(builder.newCharReader()); + if (!reader->parse(s.c_str(), s.c_str() + s.length(), &root, + &err)) { + throw "Ivalid JSON!"; + } + curl_easy_cleanup(curl); + } + return Json::Value(); +} +size_t writefunc(void *ptr, size_t size, size_t nmemb, std::string *s) +{ + s->append(static_cast(ptr), size*nmemb); + return size*nmemb; +} \ No newline at end of file diff --git a/src/WebAPI.h b/src/WebAPI.h new file mode 100644 index 0000000..008e519 --- /dev/null +++ b/src/WebAPI.h @@ -0,0 +1,18 @@ +#ifndef TRADESIM_WEBAPI_H +#define TRADESIM_WEBAPI_H +#include +#include +#include + +class WebAPI { + std::string baseURL; +public: + WebAPI(const std::string &baseUrl); + Json::Value request(const std::string& path); + +}; + +static size_t writefunc(void *ptr, size_t size, size_t nmemb, std::string *s); + + +#endif //TRADESIM_WEBAPI_H