From 0594ac9ba0f38944ef810b5ac48a2067b1ce5a09 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Tue, 11 Jan 2022 08:00:10 +0000 Subject: [PATCH] Copied libcurl's ftp example --- json.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 57 insertions(+), 1 deletions(-) diff --git a/json.cpp b/json.cpp index 5d8e340..f64f677 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, @@ -266,6 +293,18 @@ { } +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, std::string id) : ToExchange(type, product), id(id) @@ -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