Add chat dump to monitor

This commit is contained in:
Gent S 2020-12-15 09:58:11 -05:00
parent 792a317b48
commit d03c4f109f
3 changed files with 17 additions and 0 deletions

View File

@ -14,6 +14,7 @@
#include <math.h> #include <math.h>
std::map<std::string, ChatCommand> ChatManager::commands; std::map<std::string, ChatCommand> ChatManager::commands;
std::vector<std::string> ChatManager::dump;
std::vector<std::string> parseArgs(std::string full) { std::vector<std::string> parseArgs(std::string full) {
std::stringstream ss(full); std::stringstream ss(full);
@ -815,6 +816,7 @@ void ChatManager::chatHandler(CNSocket* sock, CNPacketData* data) {
std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat)); std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat));
std::cout << "[FreeChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl; std::cout << "[FreeChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl;
dump.push_back(PlayerManager::getPlayerName(plr, true) + ": " + fullChat);
if (fullChat.length() > 1 && fullChat[0] == CMD_PREFIX) { // PREFIX if (fullChat.length() > 1 && fullChat[0] == CMD_PREFIX) { // PREFIX
runCmd(fullChat, sock); runCmd(fullChat, sock);
@ -844,6 +846,7 @@ void ChatManager::menuChatHandler(CNSocket* sock, CNPacketData* data) {
std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat)); std::string fullChat = sanitizeText(U16toU8(chat->szFreeChat));
std::cout << "[MenuChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl; std::cout << "[MenuChat] " << PlayerManager::getPlayerName(plr, false) << ": " << fullChat << std::endl;
dump.push_back(PlayerManager::getPlayerName(plr, true) + ": " + fullChat);
// send to client // send to client
INITSTRUCT(sP_FE2CL_REP_SEND_MENUCHAT_MESSAGE_SUCC, resp); INITSTRUCT(sP_FE2CL_REP_SEND_MENUCHAT_MESSAGE_SUCC, resp);
@ -921,6 +924,7 @@ void ChatManager::announcementHandler(CNSocket* sock, CNPacketData* data) {
} }
std::cout << "[Bcast " << announcement->iAreaType << "] " << PlayerManager::getPlayerName(plr, false) << ": " << U16toU8(msg.szAnnounceMsg) << std::endl; std::cout << "[Bcast " << announcement->iAreaType << "] " << PlayerManager::getPlayerName(plr, false) << ": " << U16toU8(msg.szAnnounceMsg) << std::endl;
dump.push_back("**" + PlayerManager::getPlayerName(plr, true) + ": " + U16toU8(msg.szAnnounceMsg) + "**");
} }
// we only allow plain ascii, at least for now // we only allow plain ascii, at least for now

View File

@ -18,6 +18,7 @@ struct ChatCommand {
namespace ChatManager { namespace ChatManager {
extern std::map<std::string, ChatCommand> commands; extern std::map<std::string, ChatCommand> commands;
extern std::vector<std::string> dump;
void init(); void init();
void registerCommand(std::string cmd, int requiredLevel, CommandHandler handlr, std::string help = ""); void registerCommand(std::string cmd, int requiredLevel, CommandHandler handlr, std::string help = "");

View File

@ -1,5 +1,6 @@
#include "CNShardServer.hpp" #include "CNShardServer.hpp"
#include "PlayerManager.hpp" #include "PlayerManager.hpp"
#include "ChatManager.hpp"
#include "CNStructs.hpp" #include "CNStructs.hpp"
#include "Monitor.hpp" #include "Monitor.hpp"
#include "settings.hpp" #include "settings.hpp"
@ -102,6 +103,7 @@ outer:
if (!transmit(it, (char*)"begin\n", 6)) if (!transmit(it, (char*)"begin\n", 6))
continue; continue;
// player
for (auto& pair : PlayerManager::players) { for (auto& pair : PlayerManager::players) {
if (pair.second->hidden) if (pair.second->hidden)
continue; continue;
@ -114,11 +116,21 @@ outer:
goto outer; goto outer;
} }
// chat
for (auto& str : ChatManager::dump) {
n = std::snprintf(buff, sizeof(buff), "chat %s\n", str.c_str());
if (!transmit(it, buff, n))
goto outer;
}
if (!transmit(it, (char*)"end\n", 4)) if (!transmit(it, (char*)"end\n", 4))
continue; continue;
it++; it++;
} }
ChatManager::dump.clear();
} }
bool Monitor::acceptConnection(SOCKET fd, uint16_t revents) { bool Monitor::acceptConnection(SOCKET fd, uint16_t revents) {