cpp_server/main.cpp
2025-06-12 19:01:53 -05:00

91 lines
2.6 KiB
C++

#include "server.hpp"
#include <iostream>
#include <signal.h>
HttpServer* server = nullptr;
void signal_handler(int sig) {
if (server) {
std::cout << "\nShutting down server...\n";
delete server;
exit(0);
}
}
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<int>(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;
}