From 80ba94e84ed4f402862725bff3569e5bc563f5ea Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Thu, 13 Mar 2025 18:54:47 +0800 Subject: feat(session): resume history for new client or rejoin --- src/chatManager.cpp | 10 +++++++++- src/chatManager.hpp | 4 +++- src/session.cpp | 8 +++++++- 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/chatManager.cpp b/src/chatManager.cpp index 5684de3..6d92e32 100644 --- a/src/chatManager.cpp +++ b/src/chatManager.cpp @@ -17,6 +17,14 @@ void CChatManager::newMessage(const SMessage &msg) { m_vMessages.push_back(msg); } +std::string CChatManager::fmtBroadcastMessage(const SMessage &msg) { + return NFormatter::fmt(NONE, "{}: {}", msg.username, msg.msg); +} + void CChatManager::broadcastMessage(const SMessage &msg) { - g_pSessionManager->broadcastChat(NFormatter::fmt(NONE, "{}: {}", msg.username, msg.msg), msg.username); + g_pSessionManager->broadcastChat(fmtBroadcastMessage(msg), msg.username); +} + +std::vector CChatManager::getChat() { + return m_vMessages; } diff --git a/src/chatManager.hpp b/src/chatManager.hpp index 702ef37..4bfc10f 100644 --- a/src/chatManager.hpp +++ b/src/chatManager.hpp @@ -12,9 +12,11 @@ class CChatManager { }; void newMessage(const SMessage &msg); void broadcastMessage(const SMessage &msg); + std::string fmtBroadcastMessage(const SMessage &msg); + + std::vector getChat(); private: - void broadcastMessage(const std::string &msg, const std::string &username); std::vector m_vMessages; }; inline std::unique_ptr g_pChatManager; diff --git a/src/session.cpp b/src/session.cpp index 2a25db2..8991b52 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -91,7 +91,13 @@ CSession::SRecvData CSession::read(const std::string &msg) { void CSession::run() { onConnect(); - registerSession() ? recvLoop() : log(LOG, "Client {} exited without even registering", m_ip); + if (registerSession()) { + // g_pSessionManager->broadcast(g_pChatManager->getChat()); + for (const auto &chat : g_pChatManager->getChat()) + write(g_pChatManager->fmtBroadcastMessage(chat)); + recvLoop(); + } else + log(LOG, "Client {} exited without even registering", m_ip); g_pSessionManager->removeSession(self); } -- cgit v1.2.3