diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 95406ce..dea41c9 100644 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -13,6 +13,7 @@ file(GLOB source_files ) add_executable(${PROJECT_NAME} ${source_files}) -target_include_directories(${PROJECT_NAME} PUBLIC ${source_dir}/include) +target_include_directories(${PROJECT_NAME} PRIVATE ${source_dir}/include) + target_link_libraries(${PROJECT_NAME} ${USOCKETS_LIBRARY}) target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB) diff --git a/server/src/Main.cpp b/server/src/Main.cpp index 4d8da15..0d0e7e3 100644 --- a/server/src/Main.cpp +++ b/server/src/Main.cpp @@ -1,28 +1,19 @@ +#include "include/DateTime.hpp" +#include #include #include #include #include +#include #include #include -namespace DateTime -{ -std::chrono::system_clock::time_point now() -{ - return std::chrono::system_clock::now(); -} - -void outputTime(const char *desc, std::chrono::system_clock::time_point &tp) -{ - std::time_t now = std::chrono::system_clock::to_time_t(tp); - std::cout << desc << std::put_time(std::localtime(&now), "%Y-%m-%d %H:%M") << "\n"; -} -} // namespace DateTime - int main() { std::cout << "Welcome to the homechat server!\n"; + std::unique_ptr message_cache = std::make_unique(); + /* ws->getUserData returns one of these */ struct PerSocketData { diff --git a/server/src/MessageCache.cpp b/server/src/MessageCache.cpp new file mode 100644 index 0000000..9b9e93e --- /dev/null +++ b/server/src/MessageCache.cpp @@ -0,0 +1,25 @@ +#include "include/MessageCache.hpp" + +bool MessageCache::add_message(std::string message) +{ + if (m_messages.size() == m_cache_size) + { + m_messages.erase(m_messages.begin()); + } + m_messages.push_back(message); + return true; +} + +MessageCache::MessageCache() +{ +} + +bool MessageCache::empty() +{ + return m_messages.empty(); +} + +std::vector MessageCache::last_ten_messages() const +{ + return m_messages.size() > 10 ? std::vector(m_messages.end() - 10, m_messages.end()) : m_messages; +} diff --git a/server/src/include/DateTime.hpp b/server/src/include/DateTime.hpp new file mode 100644 index 0000000..89bdef2 --- /dev/null +++ b/server/src/include/DateTime.hpp @@ -0,0 +1,18 @@ +#include +#include +#include +#include + +namespace DateTime +{ +std::chrono::system_clock::time_point now() +{ + return std::chrono::system_clock::now(); +} + +void outputTime(const char *desc, std::chrono::system_clock::time_point &tp) +{ + std::time_t now = std::chrono::system_clock::to_time_t(tp); + std::cout << desc << std::put_time(std::localtime(&now), "%Y-%m-%d %H:%M") << "\n"; +} +} // namespace DateTime diff --git a/server/src/include/MessageCache.hpp b/server/src/include/MessageCache.hpp new file mode 100644 index 0000000..ffd96d5 --- /dev/null +++ b/server/src/include/MessageCache.hpp @@ -0,0 +1,18 @@ +#include +#include + +class MessageCache +{ + public: + MessageCache(); + + // adds and removes the oldest message if the cache is full + bool add_message(std::string message); + + bool empty(); + std::vector last_ten_messages() const; + + private: + std::vector m_messages; + static constexpr int m_cache_size = 100; +};