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.10.0