From ae7d00edf2f02912ec9c04919ea7535c93d2d1e0 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Wed, 12 Jan 2022 04:54:19 +0000 Subject: [PATCH] Intermediate ftp, no libcurl on mac --- /dev/null | 0 rapidxml | 1 test.cpp | 16 +++++--- .gitmodules | 3 + Makefile | 6 ++- bom.cpp | 57 +++++++++++++++++----------- bom.hpp | 4 + 7 files changed, 55 insertions(+), 32 deletions(-) diff --git a/.gitmodules b/.gitmodules index afeefb7..de554bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "easywsclient"] path = easywsclient url = https://github.com/dhbaird/easywsclient.git +[submodule "rapidxml"] + path = rapidxml + url = https://github.com/discord/rapidxml.git diff --git a/Makefile b/Makefile index 94e9115..3089278 100644 --- a/Makefile +++ b/Makefile @@ -12,15 +12,17 @@ ifneq ($(OS),Darwin) CXXFLAGS += -static +else +CXXFLAGS += -I/usr/local/opt/curl/include +LDFLAGS += -L/usr/local/opt/curl/lib endif ifeq ($(TEST),1) CXXFLAGS += -DTEST_EXCHANGE endif -json=json.o ws=easywsclient/easywsclient.o -main=${json} ${ws} protocol.o book.o +main=${ws} json.o bom.o protocol.o book.o default: test click bot diff --git a/bom.cpp b/bom.cpp index 79c7d66..e7a8866 100644 --- a/bom.cpp +++ b/bom.cpp @@ -1,49 +1,60 @@ #include "bom.hpp" #include "book.hpp" +#include "rapidxml/rapidxml.hpp" #include <cstddef> #include <cstdio> #include <curl/curl.h> +#include <fstream> +#include <iterator> #include <stdio.h> #include <string> #include <unordered_map> +#include <vector> namespace bom { +CURL* curl{NULL}; +std::string result; -static size_t my_fwrite(void* buffer, size_t size, size_t nmemb, void* stream) +static size_t my_write(void* buffer, std::size_t size, std::size_t nmemb, + void* stream) { - FILE* out = (FILE*)stream; - if (!out) { - out = tmpfile(); - if (!out) { - return -1; - } - } - return fwrite(buffer, size, nmemb, out); + std::string& text = *static_cast<std::string*>(stream); + std::size_t totalsize = size * nmemb; + text.append(static_cast<char*>(buffer), totalsize); + return totalsize; } -void updateBom(std::unordered_map<std::string, book::Book>& bs) + +void initialise() { - CURL* curl; - CURLcode res; - FILE* f{NULL}; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.bom.gov.au/anon/gen/fwo/IDN60920.xml"); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &f); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); - res = curl_easy_perform(curl); - curl_easy_cleanup(curl); - if (CURLE_OK != res) { - fprintf(stderr, "Curl failed: %d\n", res); - } } - if (f) { - fclose(f); +} + +void destroy() { curl_global_cleanup(); } + +void updateBom(std::unordered_map<std::string, book::Book>& bs) +{ + CURLcode res; + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + if (CURLE_OK != res) { + fprintf(stderr, "Curl failed: %d\n", res); } - curl_global_cleanup(); + rapidxml::xml_document<> d; + d.parse<0>(&result[0]); + rapidxml::xml_node<>* n = d.first_node(); + for (rapidxml::xml_attribute<>* a = n->first_attribute(); a; + a = a->next_attribute()) { + std::cout << a->name() << ": " << a->value() << std::endl; + } } } // namespace bom diff --git a/bom.hpp b/bom.hpp index 5439ef0..cb5d43a 100644 --- a/bom.hpp +++ b/bom.hpp @@ -6,5 +6,7 @@ namespace bom { +void initialise(); +void destroy(); void updateBom(std::unordered_map<std::string, book::Book>& bs); -} +} // namespace bom diff --git a/click b/click deleted file mode 100755 index 9b621ad..0000000 --- a/click +++ /dev/null Binary files differ diff --git a/rapidxml b/rapidxml new file mode 160000 index 0000000..2ae4b28 --- /dev/null +++ b/rapidxml @@ -0,0 +1 @@ +Subproject commit 2ae4b2888165a393dfb6382168825fddf00c27b9 diff --git a/test.cpp b/test.cpp index 68371ea..ad954bc 100644 --- a/test.cpp +++ b/test.cpp @@ -1,6 +1,7 @@ #include "book.hpp" #include "json.hpp" #include "protocol.hpp" +#include "bom.hpp" #include <chrono> #include <unistd.h> #include <unordered_map> @@ -9,10 +10,13 @@ { // book::Book b = book::testBook(10, true); auto bs = protocol::recoverBook(); - protocol::catchUp(bs); - std::cout << bs.size() << std::endl; - for (auto i : bs) { - std::cout << i.first << std::endl; - i.second.printBook(); - } +// protocol::catchUp(bs); +// std::cout << bs.size() << std::endl; +// for (auto i : bs) { +// std::cout << i.first << std::endl; +// i.second.printBook(); +// } + bom::initialise(); + bom::updateBom(bs); + bom::destroy(); } -- Gitblit v1.9.3