From 0b7aa02704f6ece97d17fbb118519c5cc62caaba Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Wed, 19 Jan 2022 07:45:21 +0000 Subject: [PATCH] Bot prints exchange feed --- protocol.cpp | 71 +++++++++++++++++++++-------------- 1 files changed, 42 insertions(+), 29 deletions(-) diff --git a/protocol.cpp b/protocol.cpp index e21a2df..a4b8475 100644 --- a/protocol.cpp +++ b/protocol.cpp @@ -22,6 +22,7 @@ mapAnnounce; std::string server = std::string(HOST) + ":" + std::string(PORT); httplib::Client cli("http://" + server); +std::unique_ptr<easywsclient::WebSocket> ws; double lastime = 0; @@ -57,32 +58,44 @@ return bs; } -void catchUp(std::unordered_map<std::string, book::Book>& bs) +void createWebSocket() { - static std::unique_ptr<easywsclient::WebSocket> ws( - easywsclient::WebSocket::from_url("ws://" + server + "/information")); - std::string feed; - bool gotMessage = false; + ws = std::unique_ptr<easywsclient::WebSocket>( + easywsclient::WebSocket::pointer(easywsclient::WebSocket::from_url( + "ws://" + server + "/information"))); ws->poll(); - ws->dispatch([gotMessageOut = &gotMessage, messageOut = &feed, - ws = ws.get()](const std::string& message) { - *gotMessageOut = true; - *messageOut = message; - }); - if (gotMessage) { - std::queue<json::Message*> a(json::parse(feed)); - while (!a.empty()) { - if (static_cast<json::FromExchange*>(a.front()) != nullptr || - static_cast<json::FromExchange*>(a.front())->timestamp > - lastime) { - lastime = - static_cast<json::FromExchange*>(a.front())->timestamp; +} + +std::deque<json::Message*> +catchUp(std::unordered_map<std::string, book::Book>& bs) +{ + std::string feed; + bool gotMessage; + std::deque<json::Message*> out; + do { + gotMessage = false; + ws->poll(); + ws->dispatch([gotMessageOut = &gotMessage, messageOut = &feed, + ws = ws.get()](const std::string& message) { + *gotMessageOut = true; + *messageOut = message; + }); + if (gotMessage) { + std::queue<json::Message*> a(json::parse(feed)); + while (!a.empty()) { + if (static_cast<json::FromExchange*>(a.front()) != nullptr || + static_cast<json::FromExchange*>(a.front())->timestamp > + lastime) { + lastime = + static_cast<json::FromExchange*>(a.front())->timestamp; + } + protocol::handleMessage(bs, a.front()); + out.push_back(a.front()); + a.pop(); } - protocol::handleMessage(bs, a.front()); - delete a.front(); - a.pop(); } - } + } while (gotMessage); + return out; } json::Message* addOrder(json::AddMessage& order) @@ -109,24 +122,24 @@ case json::SPREAD_TYPE: case json::CALL_TYPE: case json::PUT_TYPE: - announce(bs, dynamic_cast<json::AnnounceMessage*>(message)); + announce(bs, static_cast<json::AnnounceMessage*>(message)); break; case json::SETTLEMENT: - settle(bs, dynamic_cast<json::SettleMessage*>(message)); + settle(bs, static_cast<json::SettleMessage*>(message)); break; case json::ADDED: - addedOrder(bs, dynamic_cast<json::AddedMessage*>(message)); + addedOrder(bs, static_cast<json::AddedMessage*>(message)); break; case json::DELETED: - deletedOrder(bs, dynamic_cast<json::DeletedMessage*>(message)); + deletedOrder(bs, static_cast<json::DeletedMessage*>(message)); break; case json::TRADE: - tradeOrder(bs, dynamic_cast<json::TradeMessage*>(message)); + tradeOrder(bs, static_cast<json::TradeMessage*>(message)); break; case json::BROKER_REQUEST: case json::BROKER_ACK: case json::BROKER_CONFIRM: - broker(bs, dynamic_cast<json::Broker*>(message)); + broker(bs, static_cast<json::Broker*>(message)); break; default:; } @@ -170,7 +183,7 @@ void tradeOrder(std::unordered_map<std::string, book::Book>& bs, json::TradeMessage* message) { - if (bs.contains(message->passiveOrder)) { + 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 = -- Gitblit v1.9.3