Template
1
0

Start of map responses

This commit is contained in:
2025-07-04 19:43:04 +03:00
parent c83064f8fc
commit 8097796af4
4 changed files with 36 additions and 7 deletions

View File

@@ -14,7 +14,7 @@ void HTTPrequest::processRequest() {
switch (pathHash) {
case "/upload"_hash:
writeData(Helpers::GenerateResponse("501 Not Implemented", "text/text",
"This path is not implemented yet!"));
bodyContent));
return;
}
return;

19
src/HTTPMethods.cpp Normal file
View File

@@ -0,0 +1,19 @@
#include "Helpers.hpp"
#include "Main.hpp"
// Idea is very simple this map has it so that stuff like
// responseMethods["GET","/"] have a method inside them
// There is an invoking method inside each HTTPrequest
//
// So just add your logic here and relax ;)
std::unordered_map<
std::string,
std::unordered_map<std::string, std::function<void(HTTPrequest &self)>>>
Webserver::responseMethods;
void Webserver::initResponses() {
responseMethods["GET"]["/"] = [](HTTPrequest &self) {
self.writeData(Helpers::GenerateResponse(
"200 OK", "text/html", Helpers::ReadFile("www/index.html")));
};
}

View File

@@ -10,6 +10,7 @@
#include <asio/placeholders.hpp>
#include <asio/streambuf.hpp>
#include <functional>
#include <string>
#include <unordered_map>
@@ -27,11 +28,16 @@ public:
static HTTPrequest_ptr create(asio::io_context &context);
void start();
void writeData(std::string data);
// Request itself
std::string requestType, requestPath;
std::unordered_map<std::string, std::string> headers, args;
std::string bodyContent;
private:
HTTPrequest(asio::io_context &context);
void processRequest();
void writeData(std::string data);
// Breaking Header to in lines
void processHTTPHeader();
@@ -41,11 +47,6 @@ private:
std::size_t headerSize);
void inline processBody();
// Request itself
std::string requestType, requestPath;
std::unordered_map<std::string, std::string> headers, args;
std::string bodyContent;
// Networking
asio::ip::tcp::socket sock;
asio::streambuf buffer;
@@ -58,6 +59,13 @@ public:
private:
void begin();
static void initResponses();
// Responses
static std::unordered_map<
std::string,
std::unordered_map<std::string, std::function<void(HTTPrequest &self)>>>
responseMethods;
asio::io_context &io;
asio::ip::tcp::acceptor accept;
};

View File

@@ -7,6 +7,8 @@ Webserver::Webserver(asio::io_context &context)
accept(context,
asio::ip::tcp::endpoint(asio::ip::make_address(IP), PORT)) {
std::cout << "Server is up!\n";
initResponses();
std::cout << "Path responses are set up!";
begin();
}