#include #include #include #include #include #include #include #include #include #include #include #include #include #define IP "127.0.0.1" #define PORT 8000 using asocket = asio::ip::tcp::socket; using asocket_ptr = std::shared_ptr; // We handle HTTP requests with readData, writeData, and processRequest class HTTPrequest : public std::enable_shared_from_this { public: typedef std::shared_ptr HTTPrequest_ptr; asio::ip::tcp::socket &socket(); static HTTPrequest_ptr create(asio::io_context &context); void start(); private: HTTPrequest(asio::io_context &context); void readData(); void processRequest(std::string requestType, std::string requestPath, std::unordered_map request, std::unordered_map args); void writeData(std::string data); asio::ip::tcp::socket sock; asio::streambuf buffer; }; // Server manages connections/requests class Webserver : public std::enable_shared_from_this { public: Webserver(asio::io_context &context); private: void begin(); asio::io_context &io; asio::ip::tcp::acceptor accept; };