From 03bce7d61a64fce9c54ae25e2e2a8543d82cc3bc Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 12 Mar 2025 21:23:17 +0800 Subject: feat!: require arg for server port --- src/chatServer.cpp | 4 ++-- src/chatServer.hpp | 5 ++++- src/main.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/chatServer.cpp b/src/chatServer.cpp index fc20a55..d8a340d 100644 --- a/src/chatServer.cpp +++ b/src/chatServer.cpp @@ -4,7 +4,7 @@ #include "server.hpp" #include "sessionManager.hpp" -CChatServer::CChatServer() { +CChatServer::CChatServer(uint16_t port): m_port(port) { log(LOG, "ChatServer: initialized"); }; @@ -24,7 +24,7 @@ void CChatServer::cleanup() { void CChatServer::initManagers() { log(LOG, "ChatServer: initializing managers"); log(LOG, "Creating Server"); - g_pServer = std::make_unique(8080); + g_pServer = std::make_unique(m_port); log(LOG, "Creating SessionManager"); g_pSessionManager = std::make_shared(); log(LOG, "Creating ChatManager"); diff --git a/src/chatServer.hpp b/src/chatServer.hpp index 9aac157..f6ebb23 100644 --- a/src/chatServer.hpp +++ b/src/chatServer.hpp @@ -3,14 +3,17 @@ class CChatServer { public: - CChatServer(); + CChatServer(uint16_t port); ~CChatServer(); void start(); void cleanup(); private: + uint16_t m_port; + void initManagers(); void initServer(); + std::jthread m_sessionManagerThread; }; diff --git a/src/main.cpp b/src/main.cpp index 115ad53..0ecd727 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,9 @@ #include "chatServer.hpp" #include "log.hpp" +#include #include #include +#include static void handleSignal(int sig) { signal(sig, SIG_DFL); @@ -27,11 +29,49 @@ static void registerSignals() { signal(SIGPIPE, SIG_IGN); } +static void help() { + log(ERR, "usage: chat-server "); +} + // TODO: ARGC, ARGV. the CServer ctor should take a port number -int main() { +int main(int argc, char *argv[]) { + std::vector args{argv + 1, argv + argc}; + if (args.empty()) { + help(); + return 1; + } + uint16_t port = 0; + for (const auto &arg : args) { + if (arg == "-h" || arg == "--help") { + help(); + return 0; + } else if (std::ranges::all_of(arg, ::isdigit)) { + port = std::stoi(arg); + if (std::stoi(arg) < 0) { + log(ERR, "Port number must be greater than 0"); + + return 1; + } else if (std::stoi(arg) > 65535) { + log(ERR, "Port number must be less than 65536"); + + return 1; + } + + port = std::stoi(arg); + log(LOG, "Port number: {}", port); + } + } + + if (port == 0) { + log(ERR, "Port number is required"); + + help(); + return 1; + } + registerSignals(); - g_pChatServer = std::make_unique(); + g_pChatServer = std::make_unique(port); g_pChatServer->start(); // died -- cgit v1.2.3