From ff8754ad3711541829a197b0a6373953f425c960 Mon Sep 17 00:00:00 2001 From: Xander Bazzi Date: Sat, 8 Mar 2025 03:41:40 -0500 Subject: [PATCH] initial server setup --- OrderBook.cc | 18 +++++++++++++ OrderBook.hh | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 4 ++- orderbook | Bin 0 -> 16128 bytes server.cc | 49 ++++++++++++++++++++++++++++++++++ server.hh | 10 +++++++ 6 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 OrderBook.cc create mode 100644 OrderBook.hh create mode 100755 orderbook create mode 100644 server.cc create mode 100644 server.hh diff --git a/OrderBook.cc b/OrderBook.cc new file mode 100644 index 0000000..e6ea570 --- /dev/null +++ b/OrderBook.cc @@ -0,0 +1,18 @@ +#include +#include + +namespace hft +{ + +void OrderBook::intake_order(OrderID id) +{ + // consume from an input gRPC queue + // OR from a simple socket connection +} + +int main () +{ + return 0; +} + +} // End hft namespace \ No newline at end of file diff --git a/OrderBook.hh b/OrderBook.hh new file mode 100644 index 0000000..afb2a87 --- /dev/null +++ b/OrderBook.hh @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include + +namespace hft +{ + + +class OrderBook +{ + + enum OrderType : uint8_t + { + BID = 0, + ASK + }; +private: + using OrderID = uint32_t; + using Price = uint32_t; + using Quantity = uint32_t; + + /// Content: Ask/buy, price, quantity + using Content = std::tuple; + + /// Order: Order ID, Content + using Order = std::map; + + static constexpr uint32_t ORDER_QUEUE_INIT_SIZE{1024}; + + std::vector orders; + + bool running{false}; + +public: + /// Default ctor + OrderBook() : orders{ORDER_QUEUE_INIT_SIZE} + {} + + /// No copy ctor + OrderBook(OrderBook&) = delete; + + /// No copy assignment + OrderBook operator=(OrderBook&) = delete; + + /// Move ctor + /// @todo Finish implementation, or perhaps it is smarter to use compiler default + // OrderBook(OrderBook&& other) + // { + // std::copy(other.orders.begin(), other.orders.end(), orders.begin()); + // } + + /// Move assignment + /// @todo Implement. Or maybe not + // OrderBook operator=(OrderBook&& other) + // {} + + /// @brief Adds an order to the order book queue. + /// @param + /// @param + /// @param + void intake_order(OrderID id); + + /// @brief + /// @param + void process_order(OrderID); + + /// @brief Looks for match until order is filled + void process(); +}; + +} // End hft namespace \ No newline at end of file diff --git a/README.md b/README.md index c820ce5..14ad031 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # HFT -Order Book and HFT simulator [WIP] \ No newline at end of file +[WIP] + +Order Book and HFT simulator \ No newline at end of file diff --git a/orderbook b/orderbook new file mode 100755 index 0000000000000000000000000000000000000000..b35e91f270cb8d2b5408d50712070ce21002f084 GIT binary patch literal 16128 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 literal 0 HcmV?d00001 diff --git a/server.cc b/server.cc new file mode 100644 index 0000000..f5e5b8a --- /dev/null +++ b/server.cc @@ -0,0 +1,49 @@ +#include +#include +#include +#include + +namespace net +{ + +class TCPServer +{ +private: + int status; + struct addrinfo hints; + struct addrinfo *servinfo; // Points to results + +public: + TCPServer(TCPServer&) = delete; + ~TCPServer() + { + this->stop(); + } + + void init() + { + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + if(!is_valid_struct(&hints, &servinfo)) + { + + } + } + + bool is_valid_struct(addrinfo hints, addrinfo servinfo) + { + uint8_t result = getaddrinfo(NULL, "1337", &hints, &servinfo); + return + + } + + + void stop() + { + // Maybe more. Threading stuff? + freeaddrinfo(servinfo); + } +}; +} // End net namespace \ No newline at end of file diff --git a/server.hh b/server.hh new file mode 100644 index 0000000..bf0bc3d --- /dev/null +++ b/server.hh @@ -0,0 +1,10 @@ +#include +#include +#include + +int status; +struct addrinfo hints; +struct addrinfo *servinfo; // Points to results + +memset(&hints, 0, sizeof hints); +hints.ai_family = AF_UNSPACE \ No newline at end of file