Joel Grunbaum
2022-01-20 128c6d51ec8c70e230dc86b100cb887ba3f0378d
protocol.cpp
@@ -16,12 +16,14 @@
#include <string>
#include <unordered_map>
using namespace std::literals;
namespace protocol
{
static std::unordered_map<json::MessageTypes, book::ProductTypeEnum>
   mapAnnounce;
std::string server = std::string(HOST) + ":" + std::string(PORT);
httplib::Client cli("http://" + server);
#define SERVER HOST ":" PORT
httplib::Client cli("http://" SERVER);
std::unique_ptr<easywsclient::WebSocket> ws;
double lastime = 0;
@@ -40,7 +42,6 @@
   // 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();
@@ -61,8 +62,8 @@
void createWebSocket()
{
   ws = std::unique_ptr<easywsclient::WebSocket>(
      easywsclient::WebSocket::pointer(easywsclient::WebSocket::from_url(
         "ws://" + server + "/information")));
      easywsclient::WebSocket::pointer(
         easywsclient::WebSocket::from_url("ws://" SERVER "/information")));
   ws->poll();
}
@@ -175,28 +176,58 @@
                  json::DeletedMessage* message)
{
   if (message->side == book::Buy) {
      bs[message->product].bidSide.erase(message->id);
      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);
            break;
         }
      }
   } else {
      bs[message->product].askSide.erase(message->id);
      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);
            break;
         }
      }
   }
}
void tradeOrder(std::unordered_map<std::string, book::Book>& bs,
                json::TradeMessage* message)
{
   if (bs.find(message->passiveOrder) != bs.end()) {
      if (message->tradeType == json::BUY_AGGRESSOR) {
         if (message->passiveOrderRemaining > 0) {
            bs[message->product].askSide.at(message->passiveOrder).volume =
               message->passiveOrderRemaining;
         } else {
            bs[message->product].askSide.erase(message->passiveOrder);
   if (message->tradeType == json::BUY_AGGRESSOR) {
      if (message->passiveOrderRemaining > 0) {
         for (auto& i : bs[message->product].askSide) {
            if (i.id == message->passiveOrder) {
               i.volume = message->passiveOrderRemaining;
               break;
            }
         }
      } else if (message->tradeType == json::SELL_AGGRESSOR) {
         if (message->passiveOrderRemaining > 0) {
            bs[message->product].bidSide.at(message->passiveOrder).volume =
               message->passiveOrderRemaining;
         } else {
            bs[message->product].bidSide.erase(message->passiveOrder);
      } else {
         for (auto i = bs[message->product].askSide.begin();
              i != bs[message->product].askSide.end(); i++) {
            if (i->id == message->passiveOrder) {
               bs[message->product].askSide.erase(i);
               break;
            }
         }
      }
   } else if (message->tradeType == json::SELL_AGGRESSOR) {
      if (message->passiveOrderRemaining > 0) {
         for (auto& i : bs[message->product].bidSide) {
            if (i.id == message->passiveOrder) {
               i.volume = message->passiveOrderRemaining;
               break;
            }
         }
      } else {
         for (auto i = bs[message->product].bidSide.begin();
              i != bs[message->product].bidSide.end(); i++) {
            if (i->id == message->passiveOrder) {
               bs[message->product].bidSide.erase(i);
               break;
            }
         }
      }
   }
@@ -212,7 +243,10 @@
   httplib::MultipartFormDataItems a = {{"message", message, "", ""},
                                        {"username", USER, "", ""},
                                        {"password", PASS, "", ""}};
   auto res = cli.Post("/execution", a);
   auto res =
      cli.Post("/execution",
                "message=" + message + "&username=" USER "&password=" PASS,
                "application/x-www-form-urlencoded");
   std::string b = res->body;
   std::queue<json::Message*> c = json::parse(b);
   return c.front();