From b4cf0a2e71ad2c204925b33f9600dc720e25b827 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Sun, 09 Jan 2022 23:22:58 +0000
Subject: [PATCH] Initial shift to rapidjson
---
protocol.cpp | 48 ++++++++++++++++++++++--------------------------
1 files changed, 22 insertions(+), 26 deletions(-)
diff --git a/protocol.cpp b/protocol.cpp
index fbcc617..604c725 100644
--- a/protocol.cpp
+++ b/protocol.cpp
@@ -30,14 +30,14 @@
std::unordered_map<std::string, book::Book> recoverBook()
{
std::unordered_map<std::string, book::Book> bs;
- std::ifstream sampleFile("../rec.log");
+ std::ifstream sampleFile("../data.test");
std::stringstream ss;
ss << sampleFile.rdbuf();
// httplib::Client cli("http://" + server);
// auto res = cli.Get("/recover");
std::string l;
l = ss.str();
- std::queue<json::Message*> a(json::parseMany(l));
+ std::queue<json::Message*> a(json::parse(l));
while (!a.empty()) {
protocol::handleMessage(bs, a.front());
delete a.front();
@@ -46,38 +46,32 @@
return bs;
}
-void addOrder(json::AddMessage& order)
+json::Message* addOrder(json::AddMessage& order)
{
std::string message = "{\"message\": " + order.as_string() + ", " +
"\"username\": \"" + std::string(USER) +
"\", \"password\": \"" + std::string(PASS) + "\"}";
- send(message);
+ return send(message);
}
-void deleteOrder(json::DeleteMessage& order)
+json::Message* deleteOrder(json::DeleteMessage& order)
{
std::string message = "{\"message\": " + order.as_string() +
", \"username\": \"" + std::string(USER) +
"\", \"password\": \"" + std::string(PASS) + "\"}";
- send(message);
+ return send(message);
}
void handleMessage(std::unordered_map<std::string, book::Book>& bs,
json::Message* message)
{
if (mapAnnounce.empty()) initialise();
- json::AnnounceMessage* a = dynamic_cast<json::AnnounceMessage*>(message);
- json::SettleMessage* b = dynamic_cast<json::SettleMessage*>(message);
- json::AddedMessage* c = dynamic_cast<json::AddedMessage*>(message);
- json::DeletedMessage* d = dynamic_cast<json::DeletedMessage*>(message);
- json::TradeMessage* e = dynamic_cast<json::TradeMessage*>(message);
- json::Broker* f = dynamic_cast<json::Broker*>(message);
switch (message->type) {
case json::FUTURE_TYPE:
case json::SPREAD_TYPE:
case json::CALL_TYPE:
case json::PUT_TYPE:
- announce(bs, a);
+ announce(bs, dynamic_cast<json::AnnounceMessage*>(message));
break;
case json::SETTLEMENT:
settle(bs, dynamic_cast<json::SettleMessage*>(message));
@@ -130,20 +124,20 @@
json::DeletedMessage* message)
{
if (message->side == book::Buy) {
- for (auto i = bs[message->product].bidSide.begin();
- i != bs[message->product].bidSide.end(); i++) {
- if (i->id == message->id) {
- bs[message->product].bidSide.erase(i);
- std::make_heap(bs[message->product].bidSide.begin(),
- bs[message->product].bidSide.end(),
- std::less<book::Level>());
+ for (std::size_t i = 0; i < bs[message->product].bidSide.size(); i++) {
+ if (bs[message->product].bidSide[i].id == message->id) {
+ bs[message->product].bidSide[i] = bs[message->product].bidSide.back();
+ bs[message->product].bidSide.erase(bs[message->product].bidSide.end());
+ std::make_heap(bs[message->product].bidSide.begin(),
+ bs[message->product].bidSide.end(),
+ std::less<book::Level>());
}
}
} else {
- for (auto i = bs[message->product].askSide.begin();
- i != bs[message->product].askSide.end(); i++) {
- if (i->id == message->id) {
- bs[message->product].askSide.erase(i);
+ for (std::size_t i = 0; i < bs[message->product].askSide.size(); i++) {
+ if (bs[message->product].askSide[i].id == message->id) {
+ bs[message->product].askSide[i] = bs[message->product].askSide.back();
+ bs[message->product].askSide.erase(bs[message->product].askSide.end());
std::make_heap(bs[message->product].askSide.begin(),
bs[message->product].askSide.end(),
std::greater<book::Level>());
@@ -169,9 +163,11 @@
{
}
-void send(std::string& message)
+json::Message* send(std::string& message)
{
- cli.Post("/execution", message, "text/plain");
+ auto res = cli.Post("/execution", message, "text/plain");
+ std::queue<json::Message*> a = json::parse(res->body);
+ return a.front();
}
} // namespace protocol
--
Gitblit v1.10.0