From e8c910e52d1807e2fcca3b43d80a9df6acac5387 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Wed, 12 Jan 2022 06:26:46 +0000 Subject: [PATCH] write price level to each book --- json.cpp | 66 ++++++++++++++++++++++++++++++-- 1 files changed, 61 insertions(+), 5 deletions(-) diff --git a/json.cpp b/json.cpp index 5d8e340..dfcbbf4 100644 --- a/json.cpp +++ b/json.cpp @@ -48,7 +48,8 @@ mapOrder = {{"BUY", book::Buy}, {"SELL", book::Sell}}; mapTrade = {{"BUY_AGGRESSOR", BUY_AGGRESSOR}, - {"SELL_AGGRESSOR", SELL_AGGRESSOR}}; + {"SELL_AGGRESSOR", SELL_AGGRESSOR}, + {"BROKER_TRADE", BROKER_TRADE}}; mapOrderSide = {{book::Buy, "BUY"}, {book::Sell, "SELL"}}; } @@ -58,10 +59,12 @@ SettleMessage* settle(rapidjson::Value& d); AddedMessage* added(rapidjson::Value& d); DeletedMessage* deleted(rapidjson::Value& d); +RejectMessage* reject(rapidjson::Value& d); TradeMessage* trade(rapidjson::Value& d); BrokerRequest* brokerReq(rapidjson::Value& d); BrokerAck* brokerAck(rapidjson::Value& d); BrokerConfirm* brokerCon(rapidjson::Value& d); +ErrorMessage* error(rapidjson::Value& d); std::queue<Message*> parse(std::string& str) { @@ -83,6 +86,7 @@ if (mapTypes.empty()) { initialise(); } + if (d.HasMember("error")) return error(d); Message* out; switch (mapTypes[d["type"].GetString()]) { case FUTURE_TYPE: @@ -99,6 +103,9 @@ break; case DELETED: out = deleted(d); + break; + case REJECT: + out = reject(d); break; case TRADE: out = trade(d); @@ -161,6 +168,12 @@ d["sequence"].GetInt(), d["timestamp"].GetDouble()); } +RejectMessage* reject(rapidjson::Value& d) +{ + return new RejectMessage(mapTypes[d["type"].GetString()], "", + d["error"].GetString(), uint64_t(0), double(0)); +} + TradeMessage* trade(rapidjson::Value& d) { return new TradeMessage( @@ -197,11 +210,25 @@ d["id"].GetString()); } +ErrorMessage* error(rapidjson::Value& d) +{ + return new ErrorMessage(d["error"].GetString()); +} + Message::Message() : type(NONE), product("error") {} Message::Message(MessageTypes types, std::string product) : type(types), product(product) { +} + +ErrorMessage::ErrorMessage(std::string message) + : Message(ERROR, ""), message(message) +{ +} +std::string ErrorMessage::as_string() +{ + return "{\"error\": \"" + this->message + "\"}"; } FromExchange::FromExchange(MessageTypes type, std::string product, @@ -252,9 +279,9 @@ { if (mapOrderSide.empty()) initialise(); return "{\"type\": \"ADD\", \"product\": \"" + this->product + - "\", \"price\": " + std::to_string(this->price) + ", \"side\": \"" + - mapOrderSide[this->side] + - "\", \"volume\": " + std::to_string(this->volume) + "}"; + "\", \"price\": " + std::to_string(this->price) + ", \"side\": \"" + + mapOrderSide[this->side] + + "\", \"volume\": " + std::to_string(this->volume) + "}"; } AddedMessage::AddedMessage(MessageTypes type, std::string product, @@ -264,6 +291,18 @@ : FromExchange(type, product, sequence, timestamp), id(id), side(side), price(price), filled(filled), resting(resting) { +} + +std::string AddedMessage::as_string() +{ + return "{\"type\": \"ADDED\", \"product\": \"" + this->product + + "\", \"product\": \"" + this->id + "\" \"side\": \"" + + mapOrderSide[this->side] + + "\", \"price\": " + std::to_string(this->price) + + "\"filled\": " + std::to_string(this->filled) + + ", \"resting\": " + std::to_string(this->resting) + + ", \"sequence\": " + std::to_string(this->sequence) + + ", \"timestamp\":" + std::to_string(this->timestamp) + "}"; } DeleteMessage::DeleteMessage(MessageTypes type, std::string product, @@ -276,7 +315,7 @@ { if (mapOrderSide.empty()) initialise(); return "{\"type\": \"DELETE\", \"product\": \"" + this->product + - "\", \"id\": \"" + this->id + "\"}"; + "\", \"id\": \"" + this->id + "\"}"; } DeletedMessage::DeletedMessage(MessageTypes type, std::string product, @@ -286,6 +325,15 @@ { } +std::string DeletedMessage::as_string() +{ + return "{\"type\": \"DELETED\", \"product\": \"" + this->product + + "\", \"product\": \"" + this->id + "\" \"side\": \"" + + mapOrderSide[this->side] + + ", \"sequence\": " + std::to_string(this->sequence) + + ", \"timestamp\":" + std::to_string(this->timestamp) + "}"; +} + RejectMessage::RejectMessage(MessageTypes type, std::string product, std::string error, uint64_t sequence, double timestamp) @@ -293,6 +341,14 @@ { } +std::string RejectMessage::as_string() +{ + return "{\"type\": \"REJECT\", \"product\": \"" + this->product = + "\", \"error\": \"" + this->error + + "\", \"sequence\": " + std::to_string(this->sequence) + + ", \"timestamp\": " + std::to_string(this->timestamp) + "}"; +} + TradeMessage::TradeMessage(MessageTypes type, std::string product, double price, uint64_t volume, std::string buyer, std::string seller, TradeTypeEnum tradeType, -- Gitblit v1.9.3