Joel Grunbaum
2022-01-19 0bef191acd5a77544852e6a3daae2df05bd34a31
click.cpp
@@ -2,9 +2,11 @@
#include "json.hpp"
#include "protocol.hpp"
#include <cstdint>
#include <cstdlib>
#include <getopt.h>
#include <iostream>
#include <string>
#include <unordered_map>
enum clickType { Buy, Sell, Flash, Delete };
@@ -30,6 +32,7 @@
           << "\t-p price" << std::endl
           << "\t-v volume" << std::endl
           << "\t-i id" << std::endl
           << "\t-l loop count (default to 1)" << std::endl
           << "Always need product, need side, price and volume for "
             "adding/flash, need id for deleting"
           << std::endl;
@@ -69,8 +72,11 @@
   if (d->type == json::DELETED) {
      std::cout << static_cast<json::DeletedMessage*>(d)->as_string()
              << std::endl;
   } else {
   } else if (d->type == json::REJECT) {
      std::cout << static_cast<json::RejectMessage*>(d)->as_string()
              << std::endl;
   } else if (d->type == json::ERROR) {
      std::cout << static_cast<json::ErrorMessage*>(d)->as_string()
              << std::endl;
   }
   delete b;
@@ -87,7 +93,7 @@
   } else if (b->type == json::REJECT) {
      std::cout << static_cast<json::RejectMessage*>(b)->as_string()
              << std::endl;
   } else {
   } else if (b->type == json::ERROR) {
      std::cout << static_cast<json::ErrorMessage*>(b)->as_string()
              << std::endl;
   }
@@ -100,11 +106,12 @@
   double price;
   clickType click, side;
   uint64_t volume;
   uint64_t times = 1;
   initialise();
   if (argc == 1) {
      usage(), exit(0);
   }
   while ((c = getopt(argc, argv, "a::t::s::p::v::i::")) != -1) {
   while ((c = getopt(argc, argv, "a::t::s::p::v::i::l::")) != -1) {
      switch (c) {
      case 'a':
         product = std::string(optarg);
@@ -124,6 +131,9 @@
      case 'i':
         id = std::string(optarg);
         break;
      case 'l':
         times = std::stoll(optarg);
         break;
      case '?':
         std::cout << "*1" << std::endl;
      default:
@@ -132,21 +142,23 @@
         exit(0);
      }
   }
   switch (click) {
   case Buy:
      buy(product, price, volume);
      break;
   case Sell:
      sell(product, price, volume);
      break;
   case Flash:
      if (side == clickType::Buy)
         flash(product, price, volume, book::Buy);
      else
         flash(product, price, volume, book::Sell);
      break;
   case Delete:
      deleteOrder(product, id);
      break;
   for (std::uint64_t i = 0; i < times; i++) {
      switch (click) {
      case Buy:
         buy(product, price, volume);
         break;
      case Sell:
         sell(product, price, volume);
         break;
      case Flash:
         if (side == clickType::Buy)
            flash(product, price, volume, book::Buy);
         else
            flash(product, price, volume, book::Sell);
         break;
      case Delete:
         deleteOrder(product, id);
         break;
      }
   }
}