summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/chatServer.cpp1
-rw-r--r--src/commandHandler.cpp3
-rw-r--r--src/commands.cpp4
-rw-r--r--src/renderManager.cpp20
-rw-r--r--src/renderManager.hpp2
-rw-r--r--src/session.cpp13
-rw-r--r--src/sessionManager.cpp1
7 files changed, 32 insertions, 12 deletions
diff --git a/src/chatServer.cpp b/src/chatServer.cpp
index 7b64e79..7c92721 100644
--- a/src/chatServer.cpp
+++ b/src/chatServer.cpp
@@ -36,6 +36,7 @@ void CChatServer::cleanup() {
void CChatServer::initManagers() {
log(LOG, "ChatServer: initializing managers");
+
log(LOG, "Creating RenderManager");
g_pRenderManager = std::make_unique<CRenderManager>();
log(LOG, "Creating InputManager");
diff --git a/src/commandHandler.cpp b/src/commandHandler.cpp
index 712bbe2..6340625 100644
--- a/src/commandHandler.cpp
+++ b/src/commandHandler.cpp
@@ -27,6 +27,8 @@ bool CCommandHandler::registerCommand(const SCommand &command) {
return false;
m_vCommands.push_back(command);
+
+ log(TRACE, "CommandHandler: registered command: {}", command.name);
return true;
}
@@ -48,6 +50,7 @@ CCommandHandler::SResult CCommandHandler::exeCommand(const SCommand &command, co
return {.result = "", .good = false};
}
+ log(TRACE, "CommandHandler: executing command: {}", command.name);
return command.exe(parsed);
}
diff --git a/src/commands.cpp b/src/commands.cpp
index 4e67962..431af48 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -21,7 +21,7 @@ void registerCommands() {
g_pCommandHandler->registerCommand(CCommandHandler::makeCommand<SKickArgs>({.name = "kick", .parser = [](const std::string &args) -> std::pair<SKickArgs, bool> {
size_t pos = args.find(' ');
std::string target = args;
- std::string reason = "No reason specified";
+ std::string reason = "Kicked: No reason specified";
if (pos != std::string::npos) {
target = args.substr(0, pos);
@@ -55,7 +55,7 @@ void registerCommands() {
g_pCommandHandler->registerCommand(CCommandHandler::makeCommand<SMuteArgs>({.name = "mute", .parser = [](const std::string &args) -> std::pair<SMuteArgs, bool> {
size_t pos = args.find(' ');
std::string target = args;
- std::string reason = "No reason specified";
+ std::string reason = "Muted: No reason specified";
if (pos != std::string::npos) {
target = args.substr(0, pos);
diff --git a/src/renderManager.cpp b/src/renderManager.cpp
index d3720c7..c103285 100644
--- a/src/renderManager.cpp
+++ b/src/renderManager.cpp
@@ -2,10 +2,22 @@
#include "log.hpp"
CRenderManager::CRenderManager()
- : screen(ftxui::ScreenInteractive::Fullscreen()) {
- log(SYS, "RenderManager: initialized");
+ : screen(ftxui::ScreenInteractive::TerminalOutput()) {
+ if (std::atexit([]() { g_pRenderManager->exitLoop(); }))
+ log(ERR, "Failed to register SessionManager atexit handler, will fallback to quick_exit after hang");
+ log(LOG, "RenderManager: initialized");
};
+CRenderManager::~CRenderManager() {
+ exitLoop();
+ log(SYS, "RenderManager: bye");
+}
+
+void CRenderManager::exitLoop() {
+ screen.ExitLoopClosure()();
+ screen.Exit();
+}
+
void CRenderManager::enterLoop() {
screen.Loop(renderer);
}
@@ -13,7 +25,3 @@ void CRenderManager::enterLoop() {
void CRenderManager::setRenderer(ftxui::Component component) {
renderer = std::move(component);
}
-
-CRenderManager::~CRenderManager() {
- screen.Exit();
-}
diff --git a/src/renderManager.hpp b/src/renderManager.hpp
index 4407f66..7a14cc0 100644
--- a/src/renderManager.hpp
+++ b/src/renderManager.hpp
@@ -13,6 +13,8 @@ class CRenderManager {
void setRenderer(ftxui::Component component);
private:
+ void exitLoop();
+
ftxui::ScreenInteractive screen;
ftxui::Component renderer;
diff --git a/src/session.cpp b/src/session.cpp
index 46a3927..f61c34e 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -38,11 +38,11 @@ CSession::~CSession() {
#ifdef DEBUG
void CSession::onConnect() {
- log(LOG, "Client connected");
+ log(TRACE, "Client {}@{} connected", m_name, m_ip);
}
void CSession::onDisconnect() {
- log(LOG, "Client disconnected");
+ log(TRACE, "Client {}@{} disconnected", m_name, m_ip);
}
#endif
@@ -62,7 +62,7 @@ void CSession::onErrno(eEventType eventType) {
#ifdef DEBUG
void CSession::onRecv(const SRecvData &data) {
- log(LOG, "Received: {}", data.data);
+ log(TRACE, "Received: {}", data.data);
}
void CSession::onSend(const std::string &msg) {
@@ -77,6 +77,11 @@ void CSession::recvLoop() {
break;
recvData->sanitize();
+ if (recvData->isEmpty()) {
+ log(TRACE, "Empty message from {}", m_name);
+ continue;
+ }
+
const auto isCommand = g_pCommandHandler->isCommand(recvData->data);
if (m_isAdmin && isCommand)
g_pCommandHandler->handleCommand(recvData->data, m_ip);
@@ -184,7 +189,7 @@ bool CSession::registerSession() {
this->m_name = recvData->data;
- log(LOG, "Client registered as: {}", m_name);
+ log(LOG, "Client {} registered as: {}", m_ip, m_name);
setDeaf(false);
return true;
diff --git a/src/sessionManager.cpp b/src/sessionManager.cpp
index d1cf953..d880640 100644
--- a/src/sessionManager.cpp
+++ b/src/sessionManager.cpp
@@ -25,6 +25,7 @@ CSessionManager::~CSessionManager() {
thread.detach();
session.reset();
}
+
log(SYS, "SessionManager: bye");
}