summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-03-13 18:54:47 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-03-20 23:45:00 +0800
commit80ba94e84ed4f402862725bff3569e5bc563f5ea (patch)
treedda210f0988b88dca47683bc26fde1c000cdba90 /src
parent41d19c410676def2223b59a19da9f6f3cf49a3f2 (diff)
feat(session): resume history for new client or rejoin
Diffstat (limited to 'src')
-rw-r--r--src/chatManager.cpp10
-rw-r--r--src/chatManager.hpp4
-rw-r--r--src/session.cpp8
3 files changed, 19 insertions, 3 deletions
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::SMessage> 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<SMessage> getChat();
private:
- void broadcastMessage(const std::string &msg, const std::string &username);
std::vector<SMessage> m_vMessages;
};
inline std::unique_ptr<CChatManager> 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);
}