ChatFilter.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // ChatFilter.cpp: implementation of the CChatFilter class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "KWin32.h"
  5. #include "KEngine.h"
  6. #include "ChatFilter.h"
  7. #include "stdio.h"
  8. #include "../../Engine/Src/Cryptography/EDOneTimePad.h"
  9. #include "../ErrorCode.h"
  10. #include "malloc.h"
  11. //////////////////////////////////////////////////////////////////////
  12. const char file_chatflt[] = "\settings\chatsent.flt";
  13. //////////////////////////////////////////////////////////////////////
  14. const size_t EXP_MAXLEN = 1024;
  15. extern CFilterTextLib g_libFilterText;
  16. //////////////////////////////////////////////////////////////////////
  17. // Construction/Destruction
  18. //////////////////////////////////////////////////////////////////////
  19. CChatFilter::CChatFilter()
  20. : m_pTextFilter(NULL)
  21. {
  22. }
  23. CChatFilter::~CChatFilter()
  24. {
  25. }
  26. BOOL CChatFilter::Initialize()
  27. {
  28. Error_SetErrorString("CChatFilter::Initialize()");
  29. if (m_pTextFilter)
  30. {
  31. return TRUE;
  32. }
  33. KPakFile FileChatFlt;
  34. if (FileChatFlt.Open((char*)file_chatflt) == FALSE)
  35. {
  36. Error_SetErrorCode(ERR_T_FILE_NO_FOUND);
  37. Error_SetErrorString(file_chatflt);
  38. return FALSE;
  39. }
  40. if (SUCCEEDED(g_libFilterText.CreateTextFilter(&m_pTextFilter)))
  41. {
  42. char* pBuffer = NULL;
  43. int nSize = FileChatFlt.Size();
  44. if (nSize)
  45. pBuffer = (char*)_alloca(nSize + 1);
  46. if (pBuffer)
  47. {
  48. int nFinalSize = FileChatFlt.Read(pBuffer, nSize);
  49. if (nFinalSize >= nSize)
  50. pBuffer[nSize] = 0;
  51. else
  52. memset(pBuffer + nFinalSize, 0, nSize - nFinalSize + 1);
  53. char* pLineHeader = pBuffer;
  54. do
  55. {
  56. char* pLineEnd = strchr(pLineHeader, 0x0a);
  57. int nLineLen;
  58. if (pLineEnd)
  59. {
  60. *pLineEnd = 0;
  61. nLineLen = pLineEnd - pLineHeader;
  62. }
  63. else
  64. {
  65. nLineLen = nFinalSize - (pLineHeader - pBuffer);
  66. }
  67. if (pLineHeader[0] && nLineLen > 0)
  68. {
  69. if (pLineHeader[nLineLen - 1] == 0x0d)
  70. pLineHeader[--nLineLen] = 0;
  71. if (nLineLen)
  72. {
  73. EDOneTimePad_Decipher(pLineHeader, nLineLen);
  74. m_pTextFilter->AddExpression(pLineHeader);
  75. }
  76. }
  77. pLineHeader = pLineEnd ? pLineEnd + 1: NULL;
  78. }while(pLineHeader);
  79. }
  80. }
  81. FileChatFlt.Close();
  82. if(m_pTextFilter)
  83. {
  84. return TRUE;
  85. }
  86. else
  87. {
  88. Error_SetErrorCode(ERR_T_MODULE_INIT_FAILED);
  89. return FALSE;
  90. }
  91. }
  92. BOOL CChatFilter::Uninitialize()
  93. {
  94. if (m_pTextFilter)
  95. {
  96. m_pTextFilter->Release();
  97. m_pTextFilter = NULL;
  98. }
  99. return TRUE;
  100. }
  101. BOOL CChatFilter::IsTextPass(LPCTSTR text)
  102. {
  103. if (!m_pTextFilter)
  104. return FALSE;
  105. return m_pTextFilter->IsTextPass(text);
  106. }