FedSrvApp.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. /*-------------------------------------------------------------------------
  3. * FedSrvApp
  4. *-------------------------------------------------------------------------
  5. * Purpose:
  6. * This class is called by the assert code when an assert happens
  7. */
  8. #define FED_DEBUG_DEBUGOUT 1
  9. #define FED_DEBUG_FILE 2
  10. #ifdef _DEBUG
  11. class FedSrvApp : public Win32App
  12. {
  13. public:
  14. FedSrvApp(void)
  15. :
  16. m_hFile(NULL),
  17. m_dwDebug(FED_DEBUG_DEBUGOUT)
  18. {
  19. }
  20. ~FedSrvApp(void)
  21. {
  22. CloseLogFile();
  23. }
  24. virtual void OpenLogFile(void)
  25. {
  26. CloseLogFile();
  27. char bfr[200];
  28. GetModuleFileName(NULL, bfr, 150);
  29. char* p = strrchr(bfr, '.');
  30. if (p)
  31. *(p + 1) = '\0';
  32. //_itoa(Time::Now().clock(), bfr + strlen(bfr), 10);
  33. strcat(bfr, "txt");
  34. m_hFile = CreateFile(bfr, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | FILE_FLAG_OVERLAPPED, NULL);
  35. assert (m_hFile);
  36. m_overlapped.Offset = 0;
  37. m_overlapped.OffsetHigh = 0;
  38. m_overlapped.hEvent = NULL;
  39. m_nOffset = 0;
  40. }
  41. virtual void CloseLogFile(void)
  42. {
  43. if (m_hFile)
  44. {
  45. CloseHandle(m_hFile);
  46. m_hFile = NULL;
  47. }
  48. }
  49. virtual void DebugOutput(const char *psz);
  50. virtual bool OnAssert(const char* psz, const char* pszFile, int line, const char* pszModule);
  51. virtual void OnAssertBreak();
  52. void SetDebug(DWORD dw)
  53. {
  54. if (!(m_dwDebug & FED_DEBUG_FILE) && (dw & FED_DEBUG_FILE))
  55. OpenLogFile();
  56. else if ((m_dwDebug & FED_DEBUG_FILE) && !(dw & FED_DEBUG_FILE))
  57. CloseLogFile();
  58. char buff[640];
  59. wsprintf(buff, "Debug level set from %u to %u.\n", m_dwDebug, dw);
  60. m_dwDebug = dw;
  61. DebugOutput(buff);
  62. }
  63. DWORD GetDebug()
  64. {
  65. return m_dwDebug;
  66. }
  67. private:
  68. void AsyncFileOut(const char *psz);
  69. HANDLE m_hFile;
  70. OVERLAPPED m_overlapped;
  71. DWORD m_dwDebug; // See FED_* above
  72. #pragma pack(push, 4)
  73. LONG m_nOffset;
  74. #pragma pack(pop)
  75. };
  76. extern FedSrvApp g_app;
  77. #endif