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:
@@ -100,6 +104,9 @@
case DELETED:
out = deleted(d);
break;
+ case REJECT:
+ out = reject(d);
+ break;
case TRADE:
out = trade(d);
break;
@@ -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,6 +210,11 @@
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)
@@ -204,6 +222,15 @@
{
}
+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,
uint64_t sequence, double timestamp)
: Message(type, product), sequence(sequence), timestamp(timestamp)
@@ -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.10.0