#include "server.hpp" #include #include HttpServer* server = nullptr; void signal_handler(int sig) { if (server) { std::cout << "\nShutting down server...\n"; server->stop(); } } int main() { signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); Router router; // Root route router.get("/", [](const HttpRequest& req, HttpResponse& res) { res.set_text("Hello, World! HTTP Server with Router\n"); }); // API routes router.get("/api/status", [](const HttpRequest& req, HttpResponse& res) { res.set_json("{\"status\":\"running\",\"version\":\"1.0\"}"); }); // Users routes router.get("/users", [](const HttpRequest& req, HttpResponse& res) { res.set_json("{\"users\":[{\"id\":1,\"name\":\"Alice\"},{\"id\":2,\"name\":\"Bob\"}]}"); }); router.get("/users/:id", [](const HttpRequest& req, HttpResponse& res) { std::string id = req.params.at("id"); std::string response = "{\"id\":" + id + ",\"name\":\"User" + id + "\"}"; res.set_json(response); }); router.post("/users", [](const HttpRequest& req, HttpResponse& res) { std::string body_preview = std::string(req.body.substr(0, 100)); res.set_json("{\"message\":\"User created\",\"received\":\"" + body_preview + "\"}"); res.status = 201; }); // Request info route router.get("/request-info", [](const HttpRequest& req, HttpResponse& res) { std::string info = "Method: " + std::to_string(static_cast(req.method)) + "\n"; info += "Path: " + std::string(req.path) + "\n"; info += "Query: " + std::string(req.query) + "\n"; info += "Headers: " + std::to_string(req.headers.size()) + "\n"; info += "Body length: " + std::to_string(req.body.size()) + "\n"; res.set_text(info); }); // Different HTTP methods router.put("/users/:id", [](const HttpRequest& req, HttpResponse& res) { std::string id = req.params.at("id"); res.set_json("{\"message\":\"User " + id + " updated\"}"); }); router.del("/users/:id", [](const HttpRequest& req, HttpResponse& res) { std::string id = req.params.at("id"); res.set_json("{\"message\":\"User " + id + " deleted\"}"); }); server = new HttpServer(8080, router); if (!server->start()) { std::cerr << "Failed to start server\n"; return 1; } std::cout << "Server running on http://localhost:8080\n"; std::cout << "Test routes:\n"; std::cout << " GET /\n"; std::cout << " GET /api/status\n"; std::cout << " GET /users\n"; std::cout << " GET /users/123\n"; std::cout << " POST /users\n"; std::cout << " GET /request-info\n"; std::cout << "Press Ctrl+C to stop\n"; server->run(); delete server; return 0; }