#pragma once #include "StdAfx.h" #include #include #define WRITE_LOG Commend::WriteLog #define LOG_LEVEL_DEBUG Commend::ENUM_LOG_LEVEL_DEBUG //调试信息 #define LOG_LEVEL_RUNRUN Commend::ENUM_LOG_LEVEL_RUN //代码业务逻辑 #define LOG_LEVEL_RUNRUNERROR Commend::ENUM_LOG_LEVEL_RUNERROR //代码业务逻辑错误 #define LOG_LEVEL_ERROR Commend::ENUM_LOG_LEVEL_ERROR //代码的错误 #define WELCOME_LOG_INFO _T("\r\n################日志记录开始################\r\n") class Commend { private: // 日志写入器的状态 enum enLogStatus { ENUM_LOG_INIT, ENUM_LOG_RUN, ENUM_LOG_EXITING, ENUM_LOG_EXITED, ENUM_LOG_INVALID, }; // 日志级别 enum enLogInfoLevel { ENUM_LOG_LEVEL_DEBUG = 0, ENUM_LOG_LEVEL_RUN, ENUM_LOG_LEVEL_RUNERROR, ENUM_LOG_LEVEL_ERROR, }; static HANDLE m_hThread; // 线程句柄 static unsigned m_uiThreadID; // 线程id static enLogStatus m_enStatus; // 当前log写入器的状态 static bool m_bRun; // 当前log写入器是否结束 static int m_iLogLevel; // 当前写日志的级别 //static HANDLE m_hMapLogFile; //映射到共享内存中 //static LPTSTR m_psMapAddr; //映射到共享内存到程序内存的地址 static CString m_Patch; public: Commend(); ~Commend(); //锁 static CCriticalSection m_CriticalSection; //线程锁 //参数转成字符串 static CString ToString(WORD wMainCmdID, WORD wCmdTable, const void* pBuffer); //名字 static CString ToName(WORD wMainCmdID, WORD wCmdTable, PVOID pGetGameString = NULL); //名字 static CString ToNameEx(WORD wMainCmdID, WORD wCmdTable, const void* pBuffer, int iLen, void* pGetGameString = NULL); //打印通讯日志 static void ToShow(VOID* Frame, WORD wMainCmdID, WORD wCmdTable, const void* pBuffer, int iLen, DWORD dTablePrivate = 0, DWORD dUserID = 0, PVOID pGetGameString = NULL,bool bSend = true); public: //日志信息 static std::unordered_map Log; //桌子ID,内容 //添加日志 static void AddLog(DWORD dPriateTable, CString LogText); //获取日志 static std::unordered_map GetLog(); //运行 static unsigned __stdcall LogRuns(void* pParam); static CString& GetCurTimeStr(); static int WriteUnicodeHeadToFile(CStdioFile* pFile); };