UnloadModules.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "stdafx.h"
  2. #include "CDI.h"
  3. #include "LocalConfig.h"
  4. #include "PacketAnalizer.h"
  5. #include "UnloadModules.h"
  6. UnloadModules g_Unloader;
  7. UnloadModules::UnloadModules()
  8. {
  9. m_prootClient = NULL;
  10. }
  11. UnloadModules::~UnloadModules()
  12. {
  13. if (m_prootClient)
  14. {
  15. delete m_prootClient;
  16. m_prootClient = NULL;
  17. }
  18. }
  19. bool UnloadModules::Exec()
  20. {
  21. HANDLE hand = m_prootClient->GetNotifyHandle();
  22. HANDLE vec[2] = { m_ExitFlag, hand };
  23. DWORD wait = WaitForMultipleObjects(2, vec, FALSE, INFINITE);
  24. //printf("Thread:%d,hit DrvTree Entry.code:%d\n", GetCurrentThreadId(), wait);
  25. if (wait == WAIT_TIMEOUT)
  26. {
  27. //timeout
  28. }
  29. else if (wait == WAIT_OBJECT_0)
  30. {
  31. return false;
  32. }
  33. else if (wait == WAIT_OBJECT_0 + 1)
  34. {
  35. //got notify
  36. ResDataObject packet;
  37. try {
  38. //printf("Thread:%d,DrvTree Thread Loop\n", GetCurrentThreadId());
  39. if (m_prootClient->IsClosed() == false)
  40. {
  41. PACKET_CMD cmd;
  42. do {
  43. cmd = m_prootClient->ReadCmd(packet);
  44. if (cmd == PACKET_CMD_UPDATE)
  45. {
  46. string key = PacketAnalizer::GetPacketKey(&packet);
  47. if (key == "ExitFlag")
  48. {
  49. if (m_prootClient->GetExitFlag())
  50. {
  51. m_prootClient->Close();
  52. //do the Exit Job
  53. GetCommandDispathIF()->UnLoadAll();
  54. return false;
  55. }
  56. }
  57. //ignore others
  58. }
  59. else
  60. {
  61. //ignore others
  62. //printf("Thread:%d,DrvTree Thread Ignore\n", GetCurrentThreadId(), cmd);
  63. }
  64. } while (cmd != PACKET_CMD_NONE);
  65. }
  66. else
  67. {
  68. //try once
  69. if (m_prootClient->Open((const char*)getRootpath(), ALL_ACCESS) == false)
  70. {
  71. printf("Thread:%d,Open Failed\n", GetCurrentThreadId());
  72. return false;
  73. }
  74. }
  75. }
  76. catch (...)
  77. {
  78. printf("Thread:%d,Exeption in DrvTree Thread\n", GetCurrentThreadId());
  79. }
  80. }
  81. return true;
  82. }
  83. bool UnloadModules::OnStartThread()
  84. {
  85. if (m_prootClient == NULL)
  86. {
  87. m_prootClient = new BusUnitClient();
  88. if (m_prootClient->Open((const char*)getRootpath(), ALL_ACCESS) >= RET_SUCCEED)
  89. {
  90. return true;
  91. }
  92. }
  93. return false;
  94. }