/
yaseeeeechka
/
CenterControl
Обзор
Документация
Войти
/
yaseeeeechka
/
CenterControl
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
CenterControl_TCP/include/server/ChatManager.h
47 строк
2 KB
Yaroslava
New structure of Repo. TCP impl
11 дек 2025, 21:12
11 дек 2025, 21:12
6fdf9d7
Код
Авторство
О чём код?
#ifndef CENTERCONTROL_CHATMANAGER_H #define CENTERCONTROL_CHATMANAGER_H class ChatManager { public: static ChatManager &Instance() { static ChatManager inst; return inst; } // room == "" => глобальный чат void AddMessage(const std::string &room, const std::string &user, const std::string &text) { if (text.empty()) return; std::lock_guard<std::mutex> l(m_); auto &vec = messages_[room]; // создаст в map при первом обращении vec.push_back(ChatMessageDTO{user, text}); if (vec.size() > max_messages_per_room_) { vec.erase(vec.begin(), vec.end() - static_cast<std::ptrdiff_t>(max_messages_per_room_)); } } std::vector<ChatMessageDTO> GetLastMessages(const std::string &room, std::size_t n) { std::lock_guard<std::mutex> l(m_); auto it = messages_.find(room); if (it == messages_.end() || it->second.empty()) return {}; auto &vec = it->second; if (n > vec.size()) n = vec.size(); return std::vector<ChatMessageDTO>(vec.end() - static_cast<std::ptrdiff_t>(n), vec.end()); } void ClearRoom(const std::string &room) { std::lock_guard<std::mutex> l(m_); messages_.erase(room); } private: ChatManager() = default; std::mutex m_; // ключ: имя комнаты, "" — глобальный чат (лобби) std::unordered_map<std::string, std::vector<ChatMessageDTO> > messages_; std::size_t max_messages_per_room_ = 100; // храним до 100, отдаём последние 10 }; #endif //CENTERCONTROL_CHATMANAGER_H