diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/chatManager.cpp | 10 | ||||
| -rw-r--r-- | src/chatManager.hpp | 4 | ||||
| -rw-r--r-- | src/session.cpp | 8 |
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); } |
