| | |
| | | #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; |
| | |
| | | // 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(); |
| | |
| | | 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(); |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | 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(); |