From df816494f44765a4d244318af3e68d3e1eda6973 Mon Sep 17 00:00:00 2001 From: talksik Date: Sat, 27 Jan 2024 13:16:55 -0800 Subject: [PATCH] adding in mutex for local store of messages --- server/compile_commands.json | 5 +++++ server/src/Main.cpp | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/server/compile_commands.json b/server/compile_commands.json index 2439a0b..16e7af7 100644 --- a/server/compile_commands.json +++ b/server/compile_commands.json @@ -3,5 +3,10 @@ "directory": "/home/talksik/code/homechat/server/build", "command": "/usr/bin/c++ -I/home/talksik/code/homechat/server/src/include -g -o CMakeFiles/HomechatServer.dir/src/Main.cpp.o -c /home/talksik/code/homechat/server/src/Main.cpp", "file": "/home/talksik/code/homechat/server/src/Main.cpp" +}, +{ + "directory": "/home/talksik/code/homechat/server/build", + "command": "/usr/bin/c++ -I/home/talksik/code/homechat/server/src/include -g -o CMakeFiles/HomechatServer.dir/src/MessageCache.cpp.o -c /home/talksik/code/homechat/server/src/MessageCache.cpp", + "file": "/home/talksik/code/homechat/server/src/MessageCache.cpp" } ] \ No newline at end of file diff --git a/server/src/Main.cpp b/server/src/Main.cpp index 0d0e7e3..37bd6d9 100644 --- a/server/src/Main.cpp +++ b/server/src/Main.cpp @@ -12,6 +12,7 @@ int main() { std::cout << "Welcome to the homechat server!\n"; + std::mutex message_cache_mutex; std::unique_ptr message_cache = std::make_unique(); /* ws->getUserData returns one of these */ @@ -39,7 +40,7 @@ int main() /* Handlers */ .upgrade = nullptr, .open = - [](uWS::WebSocket *ws) { + [&](uWS::WebSocket *ws) { auto user_data = ws->getUserData(); user_data->created_at = DateTime::now(); @@ -49,15 +50,29 @@ int main() std::cout << "Failed to subscribe to * channel\n"; ws->close(); } + + std::lock_guard lock(message_cache_mutex); + auto messages = message_cache->last_ten_messages(); + ws->send(std::string("Welcome to the homechat server! Here are the last 10 messages: \n"), uWS::OpCode::TEXT, false); + for (auto &message : messages) + { + ws->send(message, uWS::OpCode::TEXT, false); + } }, .message = - [](uWS::WebSocket *ws, std::string_view message, uWS::OpCode opCode) { + [&](uWS::WebSocket *ws, std::string_view message, uWS::OpCode opCode) { /* This is the opposite of what you probably want; compress if message is LARGER than 16 kb * the reason we do the opposite here; compress if SMALLER than 16 kb is to allow for * benchmarking of large message sending without compression */ std::cout << "Message received: " << message << std::endl; ws->send(message, opCode, false); ws->publish("*", message, opCode, false); + + std::lock_guard lock(message_cache_mutex); + if (!message_cache->add_message(std::string(message))) + { + std::cerr << "Failed to add message to cache" << std::endl; + } }, .dropped = [](auto * /*ws*/, std::string_view /*message*/, uWS::OpCode /*opCode*/) {