summaryrefslogtreecommitdiff
path: root/src/sessionManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sessionManager.cpp')
-rw-r--r--src/sessionManager.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/sessionManager.cpp b/src/sessionManager.cpp
new file mode 100644
index 0000000..a249f61
--- /dev/null
+++ b/src/sessionManager.cpp
@@ -0,0 +1,29 @@
+#include "sessionManager.hpp"
+#include "session.hpp"
+#include "server.hpp"
+#include <print>
+
+CSessionManager::CSessionManager() = default;
+
+CSessionManager::~CSessionManager() {
+ for (auto &[thread, session] : m_vSessions) {
+ thread.join();
+ }
+}
+
+void CSessionManager::newSession(Hyprutils::OS::CFileDescriptor sockfd) {
+ std::shared_ptr session = std::make_shared<CSession>(std::move(sockfd));
+ m_vSessions.emplace_back(std::jthread(&CSession::run, session), std::move(session));
+}
+
+void CSessionManager::enterLoop() {
+ while (true) {
+ newSession(Hyprutils::OS::CFileDescriptor{accept(g_pServer->getSocket().take(), nullptr, nullptr) /* awaits new client/session */});
+ }
+}
+
+void CSessionManager::broadcast(const std::string &msg) const {
+ for (const auto &[thread, session] : m_vSessions) {
+ session->write(msg);
+ }
+}