#pragma once // C++ Includes #include #include #include #include #include // FastInAHurry includes #include "Publisher.hh" #include "utils/ThreadSafeQueue.hh" #include "utils/ThreadPool.hh" class Algo { public: Algo(); void initialize(); void generate_orders(); void process(); void start_background_processing(); void start_market_data_streaming(); grpc::Status send(trading::Order&); bool initialized(); void stop(); bool is_running(); void cleanup_completed_futures(); private: std::queue _orders; std::atomic _initialized{false}; std::atomic _stopping{false}; std::atomic _running{false}; std::shared_ptr _pub; utils::ThreadSafeQueue _order_queue; utils::ThreadPool _thread_pool; std::mutex _orders_mutex; std::mutex _send_mutex; std::mutex _futures_mutex; std::jthread _reader_thread; std::vector _worker_threads; std::vector> _futures; };