From 6f7b994684032060f0a2d7af82f4f3572293b8d6 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Thu, 12 Jun 2025 21:41:41 +0800 Subject: internal!: organized internal structure, using cmake now --- src/core/chatServer.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/core/chatServer.cpp (limited to 'src/core/chatServer.cpp') diff --git a/src/core/chatServer.cpp b/src/core/chatServer.cpp new file mode 100644 index 0000000..4a16c56 --- /dev/null +++ b/src/core/chatServer.cpp @@ -0,0 +1,68 @@ +#include "chatServer.hpp" +#include "../io/IOManager.hpp" +#include "chatManager.hpp" +#include "../command/commandHandler.hpp" +#include "../command/commands.hpp" +#include "../io/inputManager.hpp" +#include "../debug/log.hpp" +#include "../io/renderManager.hpp" +#include "server.hpp" +#include "sessionManager.hpp" + +CChatServer::CChatServer(uint16_t port) + : m_port(port) { + if (std::atexit([]() { g_pChatServer->cleanup(); })) + log(ERR, "Failed to register CChatServer atexit handler, dtors will not be called"); + + log(LOG, "ChatServer: initialized"); +}; + +CChatServer::~CChatServer() { + cleanup(); + log(SYS, "ChatServer: bye"); +} + +void CChatServer::cleanup() { + if (g_pSessionManager) { + g_pSessionManager->shutdownSessions(); + g_pSessionManager.reset(); + } + + g_pChatManager.reset(); + g_pServer.reset(); + g_pCommandHandler.reset(); + g_pInputManager.reset(); + g_pIOManager.reset(); + g_pRenderManager.reset(); +} + +void CChatServer::initManagers() { + log(LOG, "ChatServer: initializing managers"); + + log(LOG, "Creating RenderManager"); + g_pRenderManager = std::make_unique(); + log(LOG, "Creating InputManager"); + g_pInputManager = std::make_unique(); + log(LOG, "Creating Server"); + g_pServer = std::make_unique(m_port); + log(LOG, "Creating IOManager"); + g_pIOManager = std::make_unique(); + log(LOG, "Creating SessionManager"); + g_pSessionManager = std::make_shared(); + log(LOG, "Creating ChatManager"); + g_pChatManager = std::make_unique(); +} + +void CChatServer::start() { + initManagers(); + + log(LOG, "Creating CommandHandler"); + g_pCommandHandler = std::make_unique(); + registerCommands(); + + // will await while waiting for accept() to return a new client + m_sessionManagerThread = std::jthread(&CSessionManager::run, g_pSessionManager.get()); + m_sessionManagerThread.detach(); + + g_pInputManager->inputLoop(); +} -- cgit v1.2.3