From 6926be56fe58e199673db158c4fee7ca7b140c8d Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Sun, 09 Jan 2022 08:21:26 +0000
Subject: [PATCH] Fixed deletedOrder and send now returns packet

---
 protocol.cpp |   45 ++++++++++++++++++++-------------------------
 1 files changed, 20 insertions(+), 25 deletions(-)

diff --git a/protocol.cpp b/protocol.cpp
index fbcc617..a129985 100644
--- a/protocol.cpp
+++ b/protocol.cpp
@@ -30,7 +30,7 @@
 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);
@@ -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,10 @@
 {
 }
 
-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");
+    return json::parseSingle(res->body);
 }
 
 } // namespace protocol

--
Gitblit v1.9.3