From 880b6a9275030515e11fdfeb3b6fc074bca9322d Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 9 Mar 2025 13:03:17 +0800 Subject: sessionManager: run in a jthread, for prep of inputManager refactor(main)!: move main infra to oop chatServer --- src/chatServer.cpp | 32 ++++++++++++++++++++++++++++++++ src/chatServer.hpp | 15 +++++++++++++++ src/main.cpp | 16 ++++++++++------ src/sessionManager.cpp | 2 +- src/sessionManager.hpp | 2 +- 5 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 src/chatServer.cpp create mode 100644 src/chatServer.hpp (limited to 'src') diff --git a/src/chatServer.cpp b/src/chatServer.cpp new file mode 100644 index 0000000..06f2021 --- /dev/null +++ b/src/chatServer.cpp @@ -0,0 +1,32 @@ +#include "chatServer.hpp" +#include "server.hpp" +#include "sessionManager.hpp" + +CChatServer::CChatServer() = default; + +CChatServer::~CChatServer() { + cleanup(); +} + +void CChatServer::cleanup() { + g_pServer.reset(); + g_pSessionManager.reset(); +} + +void CChatServer::initManagers() { + g_pServer = std::make_unique(8080); + g_pSessionManager = std::make_shared(); +} + + +void CChatServer::start() { + initManagers(); + + // will await while waiting for accept() to return a new client + std::jthread sessionThread = std::jthread(&CSessionManager::enterLoop, g_pSessionManager); + sessionThread.detach(); + + while (true) { + } +} + diff --git a/src/chatServer.hpp b/src/chatServer.hpp new file mode 100644 index 0000000..7109593 --- /dev/null +++ b/src/chatServer.hpp @@ -0,0 +1,15 @@ +#include + +class CChatServer { +public: + CChatServer(); + ~CChatServer(); + void start(); + void cleanup(); +private: + void initManagers(); + void initServer(); +}; + +inline std::unique_ptr g_pChatServer; + diff --git a/src/main.cpp b/src/main.cpp index e7d9780..8b800dd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,13 @@ -#include "server.hpp" -#include "sessionManager.hpp" +#include "chatServer.hpp" +// TODO: ARGC, ARGV. the CServer ctor should take a port number int main() { - g_pServer = std::make_unique(8080); - g_pSessionManager = std::make_unique(); - g_pSessionManager->enterLoop(); - return 0; + g_pChatServer = std::make_unique(); + g_pChatServer->start(); + + // died + g_pChatServer->cleanup(); + g_pChatServer.reset(); + + return 0; } diff --git a/src/sessionManager.cpp b/src/sessionManager.cpp index 290b8c6..e449567 100644 --- a/src/sessionManager.cpp +++ b/src/sessionManager.cpp @@ -13,7 +13,7 @@ CSessionManager::~CSessionManager() { } std::pair> *CSessionManager::newSession(Hyprutils::OS::CFileDescriptor sockfd) { - std::shared_ptr session = std::make_shared(std::move(sockfd)); + std::shared_ptr session = std::make_unique(std::move(sockfd)); const auto instance = &m_vSessions.emplace_back(std::jthread(&CSession::run, session), std::move(session)); instance->second->setSelf(instance); return instance; diff --git a/src/sessionManager.hpp b/src/sessionManager.hpp index 0b447b5..9d1aae8 100644 --- a/src/sessionManager.hpp +++ b/src/sessionManager.hpp @@ -20,4 +20,4 @@ class CSessionManager { private: std::vector>> m_vSessions; }; -inline std::unique_ptr g_pSessionManager; +inline std::shared_ptr g_pSessionManager; -- cgit v1.2.3