#include "server.hpp" #include #include Server* server = nullptr; void signal_handler(int) { if (server) { std::cout << "\nShutting down server...\n"; server->store.save(); server->sessions.save(); server->stop(); } } int main() { signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); Router router; // Root route router.get("/", [](const Request&, Response& res) { res.set_text("Hello, World! HTTP Server with Router\n"); res.set_cookie("test_cookie", "hey there!"); }); // API routes router.get("/api/status", [](const Request&, Response& res) { res.set_json("{\"status\":\"running\",\"version\":\"1.0\"}"); }); // Users routes router.get("/users", [](const Request&, Response& res) { res.set_json("{\"users\":[{\"id\":1,\"name\":\"Alice\"},{\"id\":2,\"name\":\"Bob\"}]}"); }); router.get("/users/:id", [](const Request& req, Response& res) { std::string id = req.get_param("id"); std::string response = "{\"id\":" + id + ",\"name\":\"User" + id + "\"}"; res.set_json(response); }); router.post("/users", [](const Request& req, Response& res) { const auto body_preview = std::string(req.body.substr(0, 100)); res.set_json(R"({"message":"User created","received":")" + body_preview + "\"}"); res.status = 201; }); router.get("/request-info", [](const Request& req, Response& 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); }); router.get("/foo", [](const Request&, Response& res) { res.set_text("Admin"); }); router.get("/admin/counter", [](const Request&, Response& res) { auto current = server->store.get("visit_count"); int count = current ? current.value() : 0; server->store.set("visit_count", count + 1); res.set_text("Counter: " + std::to_string(count + 1)); }); server = new Server(8080, router); server->serve_static("../assets"); if (!server->start()) { std::cerr << "Failed to start server\n"; return 1; } std::cout << "Server running on http://localhost:8080\n"; std::cout << "Press Ctrl+C to stop\n"; server->run(); delete server; return 0; }