diff --git a/src/logger.cpp b/src/logger.cpp index ffcb111..e840667 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -1,32 +1,35 @@ #include #include "logger.hpp" +void Log(std::string const & label, std::string const & message) +{ + std::printf("[%s] %s\n", label.c_str(), message.c_str()); +} + +void Logger::Success(const std::string & s) +{ + Log("SUCCESS", s); +} + +void Logger::Error(const std::string & s) +{ + Log("ERROR", s); +} + +void Logger::Info(const std::string & s) +{ + Log("INFO", s); +} + +void Logger::Debug(const std::string & s) +{ + Log("DEBUG", s); +} + Logger::~Logger() { } Logger::Logger() { -} - -void Logger::Success(const std::string & s) -{ - std::printf("[SUCCESS] %s\n", s.c_str()); -} - -void Logger::Error(const std::string & s) -{ - std::printf("[ERROR] %s\n", s.c_str()); -} - -void Logger::Info(const std::string & s) -{ - std::printf("[INFO] %s\n", s.c_str()); -} - -Logger & Logger::GetInstance() -{ - static Logger logger; - - return logger; } \ No newline at end of file diff --git a/src/logger.hpp b/src/logger.hpp index 604d724..7f28dc9 100644 --- a/src/logger.hpp +++ b/src/logger.hpp @@ -3,17 +3,14 @@ class Logger { -private: - Logger(); - ~Logger(); - public: void Success(const std::string & s); void Error(const std::string & s); void Info(const std::string & s); + void Debug(const std::string & s); - static Logger & GetInstance(); - + Logger(); + ~Logger(); Logger(Logger & other) = delete; Logger(Logger && other) = delete; Logger & operator=(Logger & other) = delete; diff --git a/src/main.cpp b/src/main.cpp index e52d810..6d3b9fa 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,16 +5,8 @@ int main(int argc, char ** argv) { - /* - ServerConfiguration & serverConfiguration; - if (serverConfiguration.LoadFromFile("./server.cfg") && !serverConfiguration.IsValid()) - { - Logger::GetInstance().Error("Error loading configuration file, aborting."); - return 1; - } - */ - - HttpServer httpServer; + Logger logger; + HttpServer httpServer(logger); httpServer.Execute(); return 0; diff --git a/src/middleware/base.cpp b/src/middleware/base.cpp new file mode 100644 index 0000000..a7ae324 --- /dev/null +++ b/src/middleware/base.cpp @@ -0,0 +1,9 @@ +#include "base.hpp" + +namespace Middleware +{ + BaseMiddleware::BaseMiddleware(Logger & _logger) + : logger(_logger) + { + } +} \ No newline at end of file diff --git a/src/middleware/base.hpp b/src/middleware/base.hpp index 7f13afa..6c1bfe8 100644 --- a/src/middleware/base.hpp +++ b/src/middleware/base.hpp @@ -1,6 +1,7 @@ #pragma once #include "../http/request.hpp" #include "../http/response.hpp" +#include "../logger.hpp" #include #include @@ -8,10 +9,13 @@ namespace Middleware { class BaseMiddleware { + protected: + Logger & logger; + public: virtual void HandleRequest(Http::Request const & request, Http::Response & response) = 0; - BaseMiddleware() = default; + BaseMiddleware(Logger & logger); virtual ~BaseMiddleware() = default; }; } \ No newline at end of file diff --git a/src/middleware/notfound.cpp b/src/middleware/notfound.cpp index 990b4ff..d5628c2 100644 --- a/src/middleware/notfound.cpp +++ b/src/middleware/notfound.cpp @@ -25,4 +25,9 @@ namespace Middleware responseContent.begin(), responseContent.end()); } + + NotFound::NotFound(Logger & _logger) + : BaseMiddleware(_logger) + { + } } \ No newline at end of file diff --git a/src/middleware/notfound.hpp b/src/middleware/notfound.hpp index 022ca84..e5da9c8 100644 --- a/src/middleware/notfound.hpp +++ b/src/middleware/notfound.hpp @@ -7,5 +7,7 @@ namespace Middleware { public: void HandleRequest(Http::Request const & request, Http::Response & Response) override; + + NotFound(Logger & logger); }; } \ No newline at end of file diff --git a/src/middleware/staticcontent.cpp b/src/middleware/staticcontent.cpp index b860a7c..1c4ab14 100644 --- a/src/middleware/staticcontent.cpp +++ b/src/middleware/staticcontent.cpp @@ -90,11 +90,12 @@ namespace Middleware return; } - StaticContent::StaticContent(std::string const & staticFileRoot) - : root(staticFileRoot) + StaticContent::StaticContent(Logger & _logger, std::string const & staticFileRoot) + : BaseMiddleware(_logger), + root(staticFileRoot) { std::stringstream ss; ss << "Using static file root " << root; - Logger::GetInstance().Info(ss.str()); + _logger.Info(ss.str()); } } \ No newline at end of file diff --git a/src/middleware/staticcontent.hpp b/src/middleware/staticcontent.hpp index 8967eba..534e88a 100644 --- a/src/middleware/staticcontent.hpp +++ b/src/middleware/staticcontent.hpp @@ -14,6 +14,6 @@ namespace Middleware public: virtual void HandleRequest(Http::Request const & request, Http::Response & response) override; - StaticContent(std::string const & staticFileRoot); + StaticContent(Logger & logger, std::string const & staticFileRoot); }; } \ No newline at end of file diff --git a/src/server/connectionoperator.cpp b/src/server/connectionoperator.cpp index 25433bf..365e9e0 100644 --- a/src/server/connectionoperator.cpp +++ b/src/server/connectionoperator.cpp @@ -15,7 +15,7 @@ void ConnectionOperator::SendResponse(Connection const & connection, Http::Respo } catch(std::runtime_error & e) { - Logger::GetInstance().Error("Error writing data to connection"); + logger.Error("Error writing data to connection"); } } @@ -34,7 +34,7 @@ void ConnectionOperator::HandleNewConnection(Connection const & newConnection) ss << "Error during parsing of request <"; ss << e.what(); ss << '>'; - Logger::GetInstance().Error(ss.str()); + logger.Error(ss.str()); response.code = HttpResponse::Code::BAD_REQUEST; SendResponse(newConnection, response); @@ -54,7 +54,7 @@ void ConnectionOperator::HandleNewConnection(Connection const & newConnection) ss << " request for file <"; ss << request.url.GetPath(); ss << '>'; - Logger::GetInstance().Error(ss.str()); + logger.Error(ss.str()); response.code = HttpResponse::Code::NOT_IMPLEMENTED; SendResponse(newConnection, response); @@ -65,15 +65,16 @@ void ConnectionOperator::HandleNewConnection(Connection const & newConnection) newConnection.WriteBytes(bytesToSend); } -ConnectionOperator::ConnectionOperator() +ConnectionOperator::ConnectionOperator(Logger & _logger) + : logger(_logger) { // Base static file server auto const & staticFileRoot = ServerConfiguration::GetInstance().GetWwwRoot(); if (staticFileRoot.size() > 0) { - middlewares.emplace_back(std::make_unique(staticFileRoot)); + middlewares.emplace_back(std::make_unique(_logger, staticFileRoot)); } // ALWAYS LAST! - middlewares.emplace_back(std::make_unique()); + middlewares.emplace_back(std::make_unique(_logger)); } \ No newline at end of file diff --git a/src/server/connectionoperator.hpp b/src/server/connectionoperator.hpp index f7f5f5e..e5ad9f3 100644 --- a/src/server/connectionoperator.hpp +++ b/src/server/connectionoperator.hpp @@ -1,4 +1,5 @@ #pragma once +#include "../logger.hpp" #include "../middleware/base.hpp" #include "connection.hpp" #include @@ -8,6 +9,7 @@ class ConnectionOperator { private: + Logger & logger; std::vector> middlewares; void SendResponse(Connection const & connection, Http::Response const & response) const; @@ -15,5 +17,5 @@ private: public: void HandleNewConnection(Connection const & newConnection); - ConnectionOperator(); + ConnectionOperator(Logger & logger); }; \ No newline at end of file diff --git a/src/server/listeningsocket.hpp b/src/server/listeningsocket.hpp index 6a3dc79..e435feb 100644 --- a/src/server/listeningsocket.hpp +++ b/src/server/listeningsocket.hpp @@ -1,4 +1,5 @@ #pragma once +#include "../logger.hpp" #include "connection.hpp" #include #include diff --git a/src/server/server.cpp b/src/server/server.cpp index 17af6e1..6d8fdd0 100755 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -15,17 +15,18 @@ void HttpServer::Execute() } catch (std::runtime_error & e) { - Logger::GetInstance().Info("Connection dropped on accept"); + logger.Info("Connection dropped on accept"); } } } -HttpServer::HttpServer() - : listeningSocket(ServerConfiguration::GetInstance().GetPort()), - connectionOperator(), +HttpServer::HttpServer(Logger & _logger) + : logger(_logger), + listeningSocket(ServerConfiguration::GetInstance().GetPort()), + connectionOperator(_logger), isOpen(true) { std::stringstream ss; ss << "Listening on port " << ServerConfiguration::GetInstance().GetPort(); - Logger::GetInstance().Info(ss.str()); + logger.Info(ss.str()); } \ No newline at end of file diff --git a/src/server/server.hpp b/src/server/server.hpp index 5f13afc..57859e1 100755 --- a/src/server/server.hpp +++ b/src/server/server.hpp @@ -1,10 +1,12 @@ #pragma once +#include "../logger.hpp" #include "connectionoperator.hpp" #include "listeningsocket.hpp" class HttpServer { private: + Logger & logger; ListeningSocket listeningSocket; ConnectionOperator connectionOperator; bool isOpen; @@ -12,7 +14,7 @@ private: public: void Execute(); - HttpServer(); + HttpServer(Logger & logger); HttpServer(HttpServer & other) = delete; HttpServer & operator=(HttpServer & other) = delete; }; \ No newline at end of file