#include "StdAfx.h"
|
#include "UpsUpdateDataMgr.h"
|
#include "TaskItemData.h"
|
|
CUpsUpdateDataMgr::CUpsUpdateDataMgr(void)
|
{
|
m_pOwner = NULL;
|
m_bTasking = false;
|
m_dtLastTasking = CHighTime::GetPresentTime( true );
|
|
}
|
|
CUpsUpdateDataMgr::~CUpsUpdateDataMgr(void)
|
{
|
CleanData( );
|
}
|
|
void CUpsUpdateDataMgr::CleanData( )
|
{
|
POSITION pos;
|
CTaskItemData *pItem = NULL;
|
|
for ( pos = m_listTaskItemData.GetHeadPosition( ); pos; pos )
|
{
|
pItem = (CTaskItemData*)m_listTaskItemData.GetNext( pos );
|
if ( pItem )
|
{
|
delete pItem;
|
pItem = NULL;
|
}
|
}
|
m_listTaskItemData.RemoveAll( );
|
}
|
|
void CUpsUpdateDataMgr::AddTaskItemData(CString strAppProcName, CString strServer, UINT nPort, CString strAppFlag, CString strCurVer, CString strFileSFlag, CString strFileServer, long nFilePort,int nVerPrompt )
|
{
|
CTaskItemData *pItem = NULL;
|
CString strID;
|
|
strID = CBaseCommFun::GenStringID( );
|
|
if ( strAppFlag.IsEmpty( ) )
|
return;
|
if ( strServer.IsEmpty( ) )
|
strServer = _T("127.0.0.1");
|
if ( nPort <= 0 )
|
nPort = OIUPS_DEFAULT_PORT;
|
|
pItem = new CTaskItemData;
|
|
pItem->m_strAppProcName = strAppProcName;
|
pItem->m_strID = strID;
|
pItem->m_strServer = strServer;
|
pItem->m_nPort = nPort;
|
pItem->m_strAppFlag = strAppFlag;
|
pItem->m_strCurVer = strCurVer;
|
|
pItem->m_strFileSIP = strFileServer;
|
pItem->m_nFileSPort = nFilePort;
|
pItem->m_strFileSFlag = strFileSFlag;
|
pItem->m_nVerPrompt = nVerPrompt;
|
pItem->m_pOwner = m_pOwner;
|
pItem->m_strLoginName = _T("sa");
|
pItem->m_strUserName = _T("sa");
|
pItem->m_strUserSession = _T("");
|
|
CString strLog ;
|
strLog.Format(_T("%d"),nVerPrompt);
|
m_listTaskItemData.AddTail( pItem );
|
}
|
|
long CUpsUpdateDataMgr::GetItemCount( )
|
{
|
return m_listTaskItemData.GetCount( );
|
}
|
|
void CUpsUpdateDataMgr::StartTaskItemData( )
|
{
|
CHighTimeSpan dtSpan;
|
CHighTime dtCur = CHighTime::GetPresentTime( TRUE );
|
|
if ( m_bTasking )
|
{ // ÅжÏÊÇ·ñ³¬Ê±ÁË
|
//dtSpan = dtCur - m_dtLastTasking;
|
//if ( dtSpan.GetTotalSeconds( ) > TIME_OVERTIME )
|
{ // ³¬Ê±ÅжÏ
|
OverTaskItemData( );
|
}
|
return;
|
}
|
|
POSITION posFind = NULL;
|
CTaskItemData *pItem = NULL;
|
|
posFind = m_listTaskItemData.GetHeadPosition( );
|
if ( posFind == NULL )
|
return;
|
pItem = (CTaskItemData*)m_listTaskItemData.GetAt( posFind );
|
if ( pItem == NULL )
|
return;
|
m_bTasking = true;
|
if ( pItem->IsTasking( ) )
|
return;
|
pItem->DoStartTask( );
|
m_dtLastTasking = CHighTime::GetPresentTime( TRUE );
|
|
}
|
|
void CUpsUpdateDataMgr::OverTaskItemData( )
|
{
|
POSITION posFind = NULL;
|
CTaskItemData *pItem = NULL;
|
CString strInfo;
|
|
posFind = m_listTaskItemData.GetHeadPosition( );
|
if ( posFind )
|
{
|
pItem = (CTaskItemData*)m_listTaskItemData.GetAt( posFind );
|
if(pItem)
|
{
|
CHighTimeSpan dtSpan;
|
CHighTime dtCur = CHighTime::GetPresentTime( TRUE );
|
CHighTime dtDownloadingTime = pItem->GetLastDownloadingTime();
|
dtSpan = dtCur - dtDownloadingTime;
|
if ( !(pItem->IsTasking( ) && pItem->IsStartDownload() && dtSpan.GetTotalSeconds( ) > TIME_OVERTIME) )
|
{
|
return;
|
}
|
}
|
m_listTaskItemData.RemoveAt( posFind );
|
}
|
|
if ( pItem )
|
{
|
strInfo.Format( _T("Ó¦Óñêʶ%s Éý¼¶³¬Ê±"), pItem->m_strAppFlag );
|
|
SaveUpsLog( strInfo );
|
|
delete pItem;
|
pItem = NULL;
|
}
|
|
m_bTasking = false;
|
|
// StartTask
|
if ( m_listTaskItemData.GetCount( ) > 0 )
|
{
|
if ( m_pOwner && m_pOwner->IsWindow( ) )
|
{
|
m_pOwner->PostMessage( WM_STARTTASK, 0, 0 );
|
}
|
}
|
}
|
|
void CUpsUpdateDataMgr::EndTaskItemData( CString strID, long nReturn )
|
{
|
POSITION posFind = FindTaskItemData( strID );
|
CTaskItemData *pItem = NULL;
|
CString strInfo;
|
|
if ( posFind )
|
{
|
pItem = (CTaskItemData*)m_listTaskItemData.GetAt( posFind );
|
m_listTaskItemData.RemoveAt( posFind );
|
}
|
|
if ( pItem )
|
{
|
if ( nReturn == 0 )
|
strInfo.Format( _T("Ó¦Óñêʶ%s Éý¼¶³É¹¦"), pItem->m_strAppFlag );
|
else if ( nReturn == 1 )
|
strInfo.Format( _T("Ó¦Óñêʶ%s ûÓÐа汾"), pItem->m_strAppFlag );
|
else if ( nReturn == 2 )
|
{
|
strInfo.Format( _T("Ó¦Óñêʶ%s Éý¼¶Ê§°Ü, ´íÎóÃèÊö:%s,´íÎóÂë:%d"), pItem->m_strAppFlag,
|
pItem->GetLastErrInfo( ), pItem->GetLastErrCode( ) );
|
}
|
else if ( nReturn == 3 )
|
{
|
strInfo.Format( _T("Ó¦Óñêʶ%s È¡ÏûÉý¼¶"), pItem->m_strAppFlag );
|
}
|
else
|
{
|
strInfo.Format( _T("Ó¦Óñêʶ%s δ֪´íÎó"), pItem->m_strAppFlag );
|
}
|
|
SaveUpsLog( strInfo );
|
|
delete pItem;
|
pItem = NULL;
|
}
|
|
m_bTasking = false;
|
|
// StartTask
|
if ( m_listTaskItemData.GetCount( ) > 0 )
|
{
|
if ( m_pOwner && m_pOwner->IsWindow( ) )
|
{
|
m_pOwner->PostMessage( WM_STARTTASK, 0, 0 );
|
}
|
}
|
}
|
|
POSITION CUpsUpdateDataMgr::FindTaskItemData( CString strID )
|
{
|
POSITION pos, posOld;
|
CTaskItemData *pItem = NULL;
|
|
for ( pos = m_listTaskItemData.GetHeadPosition( ); pos; pos )
|
{
|
posOld = pos;
|
pItem = (CTaskItemData*)m_listTaskItemData.GetNext( pos );
|
if ( !pItem )
|
continue;
|
|
if ( pItem->m_strID == strID )
|
return posOld;
|
}
|
|
return NULL;
|
}
|
|
void CUpsUpdateDataMgr::SaveUpsLog( CString strInfo )
|
{
|
CHighTime dtCur = CHighTime::GetPresentTime( true );
|
CString strRowInfo, strDate;
|
CString strFileName;
|
CString strModulePath;
|
|
strDate = dtCur.Format( _T("%Y-%m-%d %H:%M:%S") );
|
strModulePath = CBaseCommFun::GetModulePath( );
|
strRowInfo.Format( _T("%s %s\r\n"), strDate, strInfo );
|
strFileName.Format( _T("%s\\UpsLog.txt"), strModulePath );
|
/*if(CBaseCommFun::IsShowAMLog( ))
|
CBaseCommFun::WriteRowToFile( strFileName , strRowInfo );*/
|
}
|
|
CString CUpsUpdateDataMgr::GetErrInfo(long nErrID)
|
{
|
CFileClientAsynMgr FileClientMgr;
|
return FileClientMgr.GetErrInfo(nErrID);
|
}
|
BOOL CUpsUpdateDataMgr::ParseErrerInfo( CString strErrorInfo, long &nErrID, CString &strErr)
|
{
|
COIXMLParser xmlParser;
|
IXMLDOMElementPtr ptrBody;
|
IXMLDOMNodePtr ptrNode,ptrNext;
|
CString strNodeName,strNodeValue;
|
|
nErrID = 0;
|
strErr = _T("");
|
if ( strErrorInfo.IsEmpty( ) )
|
return FALSE;
|
if( !xmlParser.ParseXMLStr(strErrorInfo, ptrBody) )
|
{
|
return FALSE;
|
}
|
ptrBody->get_firstChild( &ptrNode);
|
while(ptrNode)
|
{
|
COIXMLParser::GetNodeContent(ptrNode, strNodeName, strNodeValue);
|
if ( strNodeName.CompareNoCase( _T("ErrCode") ) == 0 )
|
{
|
nErrID = _tstol(strNodeValue);
|
}
|
if ( strNodeName.CompareNoCase( _T("ErrInfo") ) == 0 )
|
{
|
strErr = strNodeValue;
|
}
|
ptrNode->get_nextSibling( &ptrNext);
|
ptrNode = ptrNext;
|
}
|
return TRUE;
|
}
|