#include "StdAfx.h"
|
#include "MBThreadWatchDB.h"
|
#include "MBDocCoverMode.h"
|
#include "MBTransExtendEvents.h"
|
|
CMBThreadWatchDB::CMBThreadWatchDB(void)
|
{
|
m_bStop = false;
|
m_pTransMgr = NULL;
|
m_pWatchMgr = NULL;
|
}
|
|
|
|
|
CMBThreadWatchDB::~CMBThreadWatchDB(void)
|
{
|
}
|
|
|
// ¿ªÊ¼Ïß³Ì
|
void CMBThreadWatchDB::StartThread()
|
{
|
if(IsRunning())
|
return;
|
|
BeginThread();
|
}
|
|
// ½áÊøÏß³Ì
|
void CMBThreadWatchDB::OverThread()
|
{
|
m_bStop = true;
|
|
m_ExitThreadEven.Set();
|
|
if(!IsRunning())
|
return;
|
|
EndThread();
|
}
|
|
void CMBThreadWatchDB::SetTransMgr(CMBTransMgr *pTransMgr)
|
{
|
m_pTransMgr = pTransMgr;
|
}
|
|
void CMBThreadWatchDB::SetWatchMgr( CMBWatchMgr *pWatchMgr )
|
{
|
m_pWatchMgr = pWatchMgr;
|
}
|
|
void CMBThreadWatchDB::SetFileSFlag( CString strFileSFlag )
|
{
|
m_strFileSFlag = strFileSFlag;
|
}
|
|
// ²åÈëdb
|
bool CMBThreadWatchDB::ExcInsertDB( SYNCDIR_CMDITEM &item,int nCoverMode,CString &strErrInfo )
|
{
|
int nIsDir = 0;
|
CString strSvrPath,strSvrTmpPath;
|
CString strCatalog;
|
CString strRootDir;
|
int nType = 0;
|
m_pWatchMgr->FindBackupDirInfo1(strRootDir,strSvrTmpPath,strCatalog,nType);
|
CString strFileName = item.strFileName;
|
strSvrPath = CStrFileUtils::GetServerPath(strRootDir,strSvrTmpPath,strFileName);
|
if( CStrFileUtils::IsExist(strFileName ))
|
{
|
nIsDir = 0;
|
}
|
else if( CStrFileUtils::IsDirExit( strFileName ))
|
{
|
nIsDir = 1;
|
}
|
CAutoRefPtr<CMBUploadFileInfo> pUploadFileInfo(new CMBUploadFileInfo());
|
pUploadFileInfo->Release(); // ÊÍ·ÅÒýÓüÆÊý
|
pUploadFileInfo->m_nCabinetType = CMBBaseCabinetObj::CABINET_PSN;
|
pUploadFileInfo->m_strID = CStrFileUtils::GenerateGuid(); // id
|
pUploadFileInfo->m_strServerPath = strSvrPath; // ·þÎñ·¾¶
|
pUploadFileInfo->SetLocalPath(strFileName); // µ±Ç°Â·¾¶
|
pUploadFileInfo->SetStatus(CMBUploadFileInfo::Status_NoFinish); // ״̬
|
pUploadFileInfo->m_nFileSize = CStrFileUtils::GetFileSize(strFileName);; // Îļþ´óС
|
pUploadFileInfo->m_nIsDir = nIsDir; // 1ÊÇĿ¼£¬0 ²»ÊÇ
|
pUploadFileInfo->m_strFileSvr = m_strFileSFlag; // Îļþ·þÎñÆ÷±êʶ
|
pUploadFileInfo->m_strFileName = CStrFileUtils::GetFileName(strFileName) ; // ÎļþÃû³Æ
|
pUploadFileInfo->m_strTAddTime = CStrFileUtils::GetLocalDt(); // Ìí¼Óʱ¼ä
|
pUploadFileInfo->m_strCabinetID = _T(""); // Îĵµ¹ñid
|
pUploadFileInfo->m_nCoverMode = nCoverMode; // ¸²¸Çģʽ
|
pUploadFileInfo->m_strFrom = FCTN_BACKDIR; // À´Ô´
|
if(!m_pTransMgr->InsertSqliteUploadFile( pUploadFileInfo,strErrInfo )) // ²åÈëÊý¾Ý¿â
|
return false;
|
|
return true;
|
}
|
|
bool CMBThreadWatchDB::ExcRename(SYNCDIR_CMDITEM &item,CString &strErrInfo)
|
{
|
CString strSvrPath,strSvrTmpPath;
|
CString strCatalog;
|
CString strRootDir;
|
int nType = 0;
|
int nIsDir = 0;
|
|
CString strFileName = item.strFileName;
|
CString strParam = item.strParam;
|
|
m_pWatchMgr->FindBackupDirInfo1(strRootDir,strSvrTmpPath,strCatalog,nType);
|
|
strSvrPath = CStrFileUtils::GetServerPath(strRootDir,strSvrTmpPath,strFileName);
|
|
if( CStrFileUtils::IsExist(strFileName ))
|
{
|
nIsDir = 0;
|
}
|
else if( CStrFileUtils::IsDirExit( strFileName ))
|
{
|
nIsDir = 1;
|
}
|
|
EventTransRename *pEvt = new EventTransRename(NULL);
|
pEvt->m_nIsDir = nIsDir;
|
|
pEvt->m_strOldName = CStrFileUtils::GetFileName(strFileName) ;
|
pEvt->m_strNewName = CStrFileUtils::GetFileName(strParam) ;
|
pEvt->m_strSvrPath = strSvrPath;
|
|
SNotifyCenter::getSingleton().FireEventAsync(pEvt);
|
pEvt->Release();
|
return true;
|
}
|
|
UINT CMBThreadWatchDB::Run()
|
{
|
CString strErrInfo;
|
try
|
{
|
while( 1 )
|
{
|
CArraySyncDirCmd arBackupDirCmd;
|
SYNCDIR_CMDITEM item;
|
SYNCDIR_CMDITEM itemTemp;
|
int nIndex = 0;
|
BOOL bRet;
|
bool bExit =false;
|
CString strOldCmd = _T("");
|
|
m_pWatchMgr->GetBackupDirChangeCMD(arBackupDirCmd);
|
if(arBackupDirCmd.GetCount() < 1 )
|
{
|
DWORD waitResult = ::WaitForSingleObject( m_ExitThreadEven.GetEvent(), 200 );
|
if ( waitResult == WAIT_OBJECT_0 )
|
{
|
bExit =true;
|
break;
|
}
|
Sleep(6 * 1000);
|
continue;;
|
}
|
BOOL bModifyFlag = FALSE;
|
int nErrID = 0;
|
int nErrID2 = 0;
|
for( int i= 0; i < arBackupDirCmd.GetCount();i++ )
|
{
|
DWORD waitResult = ::WaitForSingleObject( m_ExitThreadEven.GetEvent(), 200 );
|
if ( waitResult == WAIT_OBJECT_0 )
|
{
|
bExit =true;
|
break;
|
}
|
m_pWatchMgr->CheckBackupDirCMD(arBackupDirCmd,i);
|
}
|
if(bExit)
|
break;
|
//while( nIndex < arBackupDirCmd.GetCount() && m_pWatchDBMgr->IsLogined() )
|
while( nIndex < arBackupDirCmd.GetCount() )
|
{
|
DWORD waitResult = ::WaitForSingleObject( m_ExitThreadEven.GetEvent(), 200 );
|
if ( waitResult == WAIT_OBJECT_0 )
|
{
|
bExit =true;
|
break;
|
}
|
item = arBackupDirCmd.GetAt(nIndex);
|
bRet = false;
|
m_pWatchMgr->UpdateBackupDirChangeCMD(item.strGUID, CMD_BACKUPDIR_DEALING );
|
if(item.strOpType == CMD_BACKUPDIR_DELETE)
|
{
|
//bRet = m_pWatchDBMgr->ExcSyncDirCmdDelete(item,nErrID);
|
}
|
else if(item.strOpType == CMD_BACKUPDIR_NEW)
|
{
|
ExcInsertDB( item,CMBDocCoverMode::NEW,strErrInfo );
|
//bRet = m_pWatchDBMgr->ExcSyncDirCmdNew(item,bCheckOutSize,nErrID);
|
}
|
else if(item.strOpType == CMD_BACKUPDIR_MODIFY)
|
{
|
ExcInsertDB( item,CMBDocCoverMode::COVER,strErrInfo );
|
//bRet = m_pWatchDBMgr->ExcSyncDirCmdUpload(item,bCheckOutSize,nErrID);
|
}
|
else if(item.strOpType == CMD_BACKUPDIR_RENAME)
|
{
|
ExcRename(item,strErrInfo);
|
//bRet = m_pWatchDBMgr->ExcSyncDirCmdRename(item,nErrID);
|
}
|
if(!bRet)
|
{
|
if( (nErrID == -1 || nErrID == 28 ) && (nErrID2 == -1 || nErrID2 == 28 ))
|
{
|
nIndex++;
|
Sleep(2000);
|
continue;
|
}
|
nErrID2 = nErrID;
|
//m_pWatchMgr->UpdateBackupDirChangeCMD(item.strGUID, CMD_BACKUPDIR_DEALERROR );
|
}
|
nIndex++;
|
Sleep(500);
|
}
|
if(bExit)
|
break;
|
if( (nErrID == -1 || nErrID == 28 ))
|
{
|
Sleep(2000);
|
continue;
|
}
|
|
}
|
}
|
catch(...)
|
{
|
|
}
|
|
return 0;
|
}
|
|
|