123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "stdafx.h"
- #include "CDI.h"
- #include "LocalConfig.h"
- #include "PacketAnalizer.h"
- #include "UnloadModules.h"
- UnloadModules g_Unloader;
- UnloadModules::UnloadModules()
- {
- m_prootClient = NULL;
- }
- UnloadModules::~UnloadModules()
- {
- if (m_prootClient)
- {
- delete m_prootClient;
- m_prootClient = NULL;
- }
- }
- bool UnloadModules::Exec()
- {
- HANDLE hand = m_prootClient->GetNotifyHandle();
- HANDLE vec[2] = { m_ExitFlag, hand };
- DWORD wait = WaitForMultipleObjects(2, vec, FALSE, INFINITE);
- //printf("Thread:%d,hit DrvTree Entry.code:%d\n", GetCurrentThreadId(), wait);
- if (wait == WAIT_TIMEOUT)
- {
- //timeout
- }
- else if (wait == WAIT_OBJECT_0)
- {
- return false;
- }
- else if (wait == WAIT_OBJECT_0 + 1)
- {
- //got notify
- ResDataObject packet;
- try {
- //printf("Thread:%d,DrvTree Thread Loop\n", GetCurrentThreadId());
- if (m_prootClient->IsClosed() == false)
- {
- PACKET_CMD cmd;
- do {
- cmd = m_prootClient->ReadCmd(packet);
- if (cmd == PACKET_CMD_UPDATE)
- {
- string key = PacketAnalizer::GetPacketKey(&packet);
- if (key == "ExitFlag")
- {
- if (m_prootClient->GetExitFlag())
- {
- m_prootClient->Close();
- //do the Exit Job
- GetCommandDispathIF()->UnLoadAll();
- return false;
- }
- }
- //ignore others
- }
- else
- {
- //ignore others
- //printf("Thread:%d,DrvTree Thread Ignore\n", GetCurrentThreadId(), cmd);
- }
- } while (cmd != PACKET_CMD_NONE);
- }
- else
- {
- //try once
- if (m_prootClient->Open((const char*)getRootpath(), ALL_ACCESS) == false)
- {
- printf("Thread:%d,Open Failed\n", GetCurrentThreadId());
- return false;
- }
- }
- }
- catch (...)
- {
- printf("Thread:%d,Exeption in DrvTree Thread\n", GetCurrentThreadId());
- }
- }
- return true;
- }
- bool UnloadModules::OnStartThread()
- {
- if (m_prootClient == NULL)
- {
- m_prootClient = new BusUnitClient();
- if (m_prootClient->Open((const char*)getRootpath(), ALL_ACCESS) >= RET_SUCCEED)
- {
- return true;
- }
- }
- return false;
- }
|