📄 update.cpp
字号:
#include "WZ_UM.h"
#include "ReadScript.h"
#include "resource.h"
#include "UpdateDefine.h"
#include "Tlhelp32.h"
#include ".\wz_um.h"
///////////////////////////////////////////////////////////////////////////////////////
/*
扁夯 诀单捞飘 努贰胶 : 捞 努贰胶俊辑 FTP 客 HTTP 诀单捞飘 努贰胶啊 惑加 罐绰促.
*/
WZ_DECLAREDLL CWZUpdateModule::CWZUpdateModule()
{
InitializeCriticalSection (& m_critERROR_MSG);
memset (m_szIPADDR, '\0', sizeof(m_szIPADDR));
m_wPORT = 0;
memset (m_szID, '\0', sizeof(m_szID));
memset (m_szPASS, '\0', sizeof(m_szPASS));
m_lpFN_EventCallbackProc = NULL;
m_iCurrentState = STATE_DISCONNECTED;
m_bCancelUpdate = FALSE;
m_uUpdateFolderCount = 0;
m_strtUpdatingFileInfo.lpszErrorMsg = m_szLastErrorMsg;
m_bUseEventProc = FALSE;
m_nUpdateThreadID = 0;
m_bLoadUpdateInfo = FALSE;
m_nServerNumber = 0;
}
WZ_DECLAREDLL CWZUpdateModule::CWZUpdateModule (LPSTR lpszIPADDR, WORD wPORT, LPSTR lpszID, LPSTR lpszPASS)
{
InitializeCriticalSection (& m_critERROR_MSG);
strcpy (m_szIPADDR, lpszIPADDR);
m_wPORT = wPORT;
strcpy (m_szID, lpszID);
strcpy (m_szPASS, lpszPASS);
m_lpFN_EventCallbackProc = NULL;
m_iCurrentState = STATE_DISCONNECTED;
m_bCancelUpdate = FALSE;
m_uUpdateFolderCount = 0;
m_strtUpdatingFileInfo.lpszErrorMsg = m_szLastErrorMsg;
m_bUseEventProc = FALSE;
m_nUpdateThreadID = 0;
m_bLoadUpdateInfo = FALSE;
m_nServerNumber = 0;
}
WZ_DECLAREDLL CWZUpdateModule::~CWZUpdateModule()
{
DeleteCriticalSection(&m_critERROR_MSG);
}
WZ_DECLAREDLL VOID CWZUpdateModule::SetLastErrorMsg (INT iERROR_MODE, INT iERROR_CODE, LPSTR szUSER_MSG)
{
EnterCriticalSection (& m_critERROR_MSG);
DWORD dwERROR_CODE = iERROR_CODE;
DWORD dwBUFFER_LEN = sizeof(m_szLastErrorMsg);
switch (iERROR_MODE)
{
case CWZUpdateModule::ERROR_SYSTEM :
if (iERROR_CODE >= 12000)
InternetGetLastResponseInfo (&dwERROR_CODE, m_szLastErrorMsg, &dwBUFFER_LEN);
else
FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, iERROR_CODE, 0, m_szLastErrorMsg, sizeof (m_szLastErrorMsg), NULL);
m_iLastErrorMode = CWZUpdateModule::ERROR_SYSTEM;
m_strtUpdatingFileInfo.iErrorCode = iERROR_CODE;
break;
case CWZUpdateModule::ERROR_USER :
strcpy (m_szLastErrorMsg, szUSER_MSG);
m_iLastErrorMode = CWZUpdateModule::ERROR_USER;
m_strtUpdatingFileInfo.iErrorCode = 0;
break;
default :
m_szLastErrorMsg[0] = '\0';
m_iLastErrorMode = CWZUpdateModule::ERROR_NONE;
m_strtUpdatingFileInfo.iErrorCode = 0;
break;
}
AddEvent( EVENT_ERROR );
LeaveCriticalSection (& m_critERROR_MSG);
}
WZ_DECLAREDLL const LPSTR CWZUpdateModule::GetLastErrorMsg()
{
return m_szLastErrorMsg;
}
WZ_DECLAREDLL const INT CWZUpdateModule::GetLastErrorCode()
{
return m_iLastErrorCode;
}
WZ_DECLAREDLL unsigned __stdcall CWZUpdateModule::UpdateWorkerThread (LPVOID lpParam)
{
CWZUpdateModule * lpWZUM = (CWZUpdateModule *) lpParam;
if ( lpWZUM->UpdateRun() == TRUE )
lpWZUM->AddEvent( EVENT_UPDATE_END_SUCCESS );
else
lpWZUM->AddEvent( EVENT_UPDATE_END_FAIL );
return 0;
}
WZ_DECLAREDLL BOOL CWZUpdateModule::LoadLocalVerInfo()
{
if( IsUpdateInfoLoad() )
{
byte byVer[3];
GetVersionFromString( m_info.m_szServerVer[m_nServerNumber], byVer[0], byVer[1], byVer[2] );
m_btLocalVer1 = byVer[0];
m_btLocalVer2 = byVer[1];
m_btLocalVer3 = byVer[2];
m_uLocalTotalVersion = GetTotalVersion( m_btLocalVer1, m_btLocalVer2, m_btLocalVer3 );
}
else
return FALSE;
return TRUE;
}
WZ_DECLAREDLL BOOL CWZUpdateModule::SaveLocalVerInfo()
{
return m_info.SaveVersionInfo( m_btLocalVer1, m_btLocalVer2, m_btLocalVer3, m_nServerNumber );
}
WZ_DECLAREDLL BOOL CWZUpdateModule::CheckVersion(LPSTR lpszFilePath)
{
if ( (!lpszFilePath) || (!strcmp(lpszFilePath, "")))
return FALSE;
m_uUpdateFolderCount = 0;
SMDToken Token;
__try
{
if( (SMDFile = fopen(m_szVersionFileName, "r")) == NULL )
return FALSE;
while(TRUE)
{
Token = (*GetToken)();
if( Token == END )
break;
if( Token == NAME )
{
strcpy(m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_szFolderName, TokenString);
byte byVer[3];
GetVersionFromString( TokenString, byVer[0], byVer[1], byVer[2] );
m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_btVer1 = byVer[0];
m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_btVer2 = byVer[1];
m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_btVer3 = byVer[2];
m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_uTotalVersion = GetTotalVersion( byVer[0], byVer[1], byVer[2] );
//货肺款 滚傈捞 泅犁 肺拿狼 滚傈焊促 农促搁.. 诀单捞飘且 弃歹狼 俺荐甫 刘啊矫挪促.
if (m_strtUpdateFolderInfo[m_uUpdateFolderCount].m_uTotalVersion > m_uLocalTotalVersion)
m_uUpdateFolderCount++;
if( m_uUpdateFolderCount > MAX_FOLDERINFO-1 )
return FALSE;
}
}
}
__finally
{
if (SMDFile)
fclose(SMDFile);
CHAR szVERFILE_NAME [MAX_PATH], szVERFILE_EXE [MAX_PATH], szVERFILE_FULLNAME [MAX_PATH];
_splitpath (lpszFilePath, NULL, NULL, szVERFILE_NAME, szVERFILE_EXE);
wsprintf(szVERFILE_FULLNAME, "%s%s", szVERFILE_NAME, szVERFILE_EXE);
DeleteFile (szVERFILE_FULLNAME);
}
return TRUE;
}
// 捞 窃荐绰 辑滚狼 滚傈颇老阑 促款 罐酒辑, 泅犁 努扼捞攫飘狼 滚傈苞 厚背窍咯,
// 诀单捞飘甫 且瘤 救 且瘤甫 搬沥窍绰 窃荐促.
// 滚傈眉农 角菩搁, RESULT_FAIL
// 诀单捞飘 颇老捞 绝栏搁, RESULT_NOMORE_UPDATE_FILES
// 己傍捞搁, RESULT_SUCCESS
WZ_DECLAREDLL eRESULT_CONSTANT CWZUpdateModule::CheckUpdateFiles()
{
// 1 . 辑滚俊 乐绰 滚傈 颇老阑 促款 罐绰促.
// 泅犁 促款罐阑妨绰 辑滚狼 弃歹俊 乐绰 滚傈 颇老阑 促款 罐绰促. 罐篮 颇老篮 肺拿俊 促款罐绰促.
TCHAR szVerFilePath[MAX_PATH];
GetVersionFilePath( szVerFilePath, MAX_PATH );
if ( !DownloadFile( szVerFilePath ) )
return RESULT_FAIL;
// 2 . 罐篮 滚傈 颇老俊辑 泅犁 努扼捞攫飘狼 滚傈苞 厚背窍咯 罐阑 颇老捞 乐栏搁 秦寸 弃歹俊辑 格废颇老阑 罐绰促.
if ( !CheckVersion(m_szVersionFileName) )
{
MessageBox (HWND_DESKTOP, "checking version file error", "error", MB_OK | MB_ICONERROR);
return RESULT_FAIL;
}
if (m_uUpdateFolderCount == 0) //诀单捞飘 且 颇老捞 绝促.
return RESULT_NOMORE_UPDATE_FILES;
return RESULT_SUCCESS;
}
// lpszFilePath绰 府胶飘 颇老狼 捞抚捞促. 扁夯利栏肺 wz_filelist.dat 捞促.
WZ_DECLAREDLL BOOL CWZUpdateModule::UpdateRun()
{
CHAR szCurrentLocalDirectory [MAX_PATH]; // 泅犁 肺拿 龋胶飘狼 叼泛配府 版肺
CHAR szCurrentLocalFilePath [MAX_PATH]={0,}; // 肺拿 龋胶飘狼 叼泛配府 版肺
CHAR szErrorMsg[256] = {0,}; // 俊矾 皋矫瘤 免仿侩
m_strtUpdatingFileInfo.Reset();
// 泅犁 角青颇老狼 叼泛配府甫 备茄促.
GetModuleDirectory( szCurrentLocalDirectory, MAX_PATH );
// 诀单捞飘 傈俊 泅犁狼 肺拿 滚傈阑 舅赴促.
LoadLocalVerInfo();
m_strtUpdatingFileInfo.btVer1 = m_btLocalVer1;
m_strtUpdatingFileInfo.btVer2 = m_btLocalVer2;
m_strtUpdatingFileInfo.btVer3 = m_btLocalVer3;
AddEvent( EVNET_VERSION_ALARM );
for (UINT i = 0 ; i < m_uUpdateFolderCount ; i++ )
{
//颇老府胶飘 颇老狼 版肺甫 掘绢柯促.
CHAR szFileListFilePath[MAX_PATH];
GetFileListFilePath( szFileListFilePath, MAX_PATH, m_strtUpdateFolderInfo[i].m_szFolderName );
//府胶飘 颇老 促款肺靛, 促款罐阑 困摹甫 瘤沥窍瘤 臼栏搁 角青颇老捞 乐绰 镑俊 促款肺靛 茄促.
if ( !DownloadFile(szFileListFilePath) )
return FALSE;
char szVerFolerPath[MAX_PATH];
GetVersionFolderPath( szVerFolerPath, MAX_PATH, m_strtUpdateFolderInfo[i].m_szFolderName );
__try
{
BOOL bRet = DownloadFilesOnFileList( szVerFolerPath );
if( bRet == FALSE)
return FALSE; //窍唱父 肋 给登档, 橇肺弊伐阑 辆丰茄促.
// 咯扁鳖瘤 吭栏搁 拉 滚傈栏肺狼 诀单捞飘啊 己傍茄 巴捞骨肺 诀等 滚傈 历厘
m_btLocalVer1 = m_strtUpdateFolderInfo[i].m_btVer1;
m_btLocalVer2 = m_strtUpdateFolderInfo[i].m_btVer2;
m_btLocalVer3 = m_strtUpdateFolderInfo[i].m_btVer3;
SaveLocalVerInfo();
// 诀单捞飘 吝 橇肺弊伐 滚傈阑 舅赴促.
m_strtUpdatingFileInfo.btVer1 = m_btLocalVer1;
m_strtUpdatingFileInfo.btVer2 = m_btLocalVer2;
m_strtUpdatingFileInfo.btVer3 = m_btLocalVer3;
AddEvent( EVNET_VERSION_ALARM );
//////////////////////////////////////////////////////////////////////////
}
__finally
{
if (SMDFile)
fclose(SMDFile);
DeleteFile( DEFAULT_FILELIST_FILE );
DeleteFile( m_szVersionFileName );
m_iCurrentState = STATE_CONNECTED;
}
}
return TRUE;
}
WZ_DECLAREDLL BOOL CWZUpdateModule::AddEvent(int nEvent)
{
// 泅犁 惑怕啊 DISCONNECTED惑怕捞搁 妮归窃荐甫 龋免窍瘤 臼绰促.
BOOL bRet = FALSE;
if ( m_lpFN_EventCallbackProc != NULL && m_bUseEventProc != FALSE )
{
m_lpFN_EventCallbackProc( nEvent, (LPVOID) this, m_strtUpdatingFileInfo);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -