#include "stdafx.h" #include "MonitoringTool.h" #include "MonitoringToolLog.h" #include "MonitoringToolSetup.h" #include #include #include #include #include CServerLog g_ChattingLog("ChatLog", 0); CServerLog g_UserStatLog("UserStatLog", 0); CMonitoringToolLog::CMonitoringToolLog() { } CMonitoringToolLog::~CMonitoringToolLog() { } /// \brief äÆÃ ÆÐŶÀ» ÆÄ½ÌÇÏ¿© ·Î±×·Î Ãâ·Â /// \param lpChatData äÆÃ ÆÐŶ bool CMonitoringToolLog::WriteChatLog(ChatToolPkt::ChatDataSend* lpChatData) { SYSTEMTIME sysTime; GetLocalTime(&sysTime); SERVER_ID serverID; serverID.dwID = lpChatData->m_dwServerID; char strRecvMsg[UCHAR_MAX * 2]; memcpy(strRecvMsg, reinterpret_cast(lpChatData + 1), lpChatData->m_cChatMsgLen); strRecvMsg[lpChatData->m_cChatMsgLen] = 0; if(lpChatData->m_cChatType == PktChat::DICE) { g_ChattingLog.Log("[%04d-%02d-%02d %02d:%02d:%02d]" "[ServerID:0x%08x][Group:%-15s][Zone:%2d][CH:%2d][X:%4d][Z:%4d][UID:%10d][CID:%10d][Type:%2d][S:%-15s][T:%-15s][ÁÖ»çÀ§:%s]\r\n", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, lpChatData->m_dwServerID, theApp.GetServerName((unsigned int)serverID.GetGroup()), serverID.GetZone(), serverID.GetChannel(), lpChatData->m_usXPos, lpChatData->m_usZPos, lpChatData->m_dwUID, lpChatData->m_dwCID, lpChatData->m_cChatType + 1, lpChatData->m_szSenderName, lpChatData->m_szTargetName, strRecvMsg); } else { g_ChattingLog.Log("[%04d-%02d-%02d %02d:%02d:%02d]" "[ServerID:0x%08x][Group:%-15s][Zone:%2d][CH:%2d][X:%4d][Z:%4d][UID:%10d][CID:%10d][Type:%2d][S:%-15s][T:%-15s][%s]\r\n", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, lpChatData->m_dwServerID, theApp.GetServerName((unsigned int)serverID.GetGroup()), serverID.GetZone(), serverID.GetChannel(), lpChatData->m_usXPos, lpChatData->m_usZPos, lpChatData->m_dwUID, lpChatData->m_dwCID, lpChatData->m_cChatType + 1, lpChatData->m_szSenderName, lpChatData->m_szTargetName, strRecvMsg); } return true; } bool CMonitoringToolLog::WriteAdminLog(unsigned char cChatType, unsigned char* szGMName, unsigned char* szUserName, unsigned char* strRecvMsg) { SYSTEMTIME sysTime; GetLocalTime(&sysTime); g_ChattingLog.Log("[%04d-%02d-%02d %02d:%02d:%02d]" "[ServerID:0x%08x][Group:%-15s][Zone:%2d][CH:%2d][X:%4d][Z:%4d][UID:%10d][CID:%10d][Type:%2d][S:%-15s][T:%-15s][%s]\r\n", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond, 0, "Tool", 0, 0, 0, 0, 0, 0, cChatType, szGMName, szUserName, strRecvMsg); return true; } /// \brief µ¿½Ã Á¢¼ÓÀÚ Á¤º¸¸¦ ·Î±×·Î Ãâ·Â /// \note °ü¸®¼­¹ö·ÎºÎÅÍ µ¿Á¢Á¤º¸¸¦ Àü´Þ¹ÞÀ½ bool CMonitoringToolLog::WriteUserStatLog() { CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance(); const unsigned int nMaxZone = Setup.GetInt(_T("ZONE_INFO"), _T("ZONE_NUM"), 0); const unsigned int nMaxGroup = Setup.GetInt(_T("SERVER_GROUP_INFO"), _T("SERVER_GROUP_NUM"), 0); const unsigned int nMaxChannel = Setup.GetInt(_T("CHANNEL_INFO"), _T("CHANNEL_NUM"), 0); SYSTEMTIME sysTime; GetLocalTime(&sysTime); char szKey[MAX_PATH]; CString strLog; for (unsigned int nIndex = 0; nIndex < nMaxGroup; ++nIndex) { strLog.AppendFormat(_T("%04d-%02d-%02d %02d:%02d:%02d"), sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond); SERVER_ID serverID; serverID.dwID = 0; serverID.sID.Type = CServerSetup::GameServer; _snprintf(szKey, MAX_PATH, _T("SERVER_GROUP_INDEX_%02d"), nIndex); serverID.sID.Group = Setup.GetInt(_T("SERVER_GROUP_INFO"), szKey, 100); strLog.AppendFormat(_T("\t%02d"), serverID.GetGroup()); for (unsigned int nIdx = 0; nIdx < nMaxZone; ++nIdx) { for (unsigned int nCH = 0; nCH < nMaxChannel; ++nCH) { _snprintf(szKey, MAX_PATH, _T("ZONE_INDEX_%02d"), nIdx); serverID.sID.ID = Setup.GetInt(_T("ZONE_INFO"), szKey, 100); serverID.sID.Channel = nCH; strLog.AppendFormat(_T("\t%4d"), CUserStatistics::GetInstance().GetUserNum(serverID.dwID)); } } strLog.Append(_T("\r\n")); g_UserStatLog.Log(strLog); } return true; } /// \brief µ¿Á¢·Î±×ÀÇ Ä÷³¸íÀ» Ãâ·Â /// \param strLog Ä÷³¸í(¿¹: WriteTime GroupIndex Z:01 C: 01 Z02: C:01) /// \note ¼Â¾÷¿¡µû¶ó Ä÷³¸íÀÌ ´Þ¶óÁö¸ç ·Î±× Ãâ·Â½Ã óÀ½ Çѹø¸¸ È£ÃâµÈ´Ù. bool CMonitoringToolLog::WriteUserStatLog(const CString& strLog) { g_UserStatLog.Log(strLog); return true; } /// \brief ¹öÆÛ¿¡ ´©ÀûµÈ äÆÃ·Î±×¸¦ Ãâ·Â void CMonitoringToolLog::FlushChatLog() { g_ChattingLog.Flush(); } /// \brief ¹öÆÛ¿¡ ´©ÀûµÈ µ¿Á¢·Î±×¸¦ Ãâ·Â void CMonitoringToolLog::FlushStatLog() { g_UserStatLog.Flush(); }