📄 ftpupdate.cpp
字号:
#include "WZ_UM.h"
#include "ReadScript.h"
WZ_DECLAREDLL CWZFtpUpdateModule::CWZFtpUpdateModule ()
{
m_hUpdateThread = NULL;
m_hCheckThread = NULL;
m_nCheckThreadID = 0;
m_bConnected = FALSE;
}
WZ_DECLAREDLL CWZFtpUpdateModule::CWZFtpUpdateModule (LPSTR lpszIPADDR, WORD wPORT, LPSTR lpszID, LPSTR lpszPASS)
: CWZUpdateModule (lpszIPADDR, wPORT, lpszID, lpszPASS)
{
m_hUpdateThread = NULL;
m_hCheckThread = NULL;
m_nCheckThreadID = 0;
m_bConnected = FALSE;
}
WZ_DECLAREDLL CWZFtpUpdateModule::~CWZFtpUpdateModule ()
{
}
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::Connect ()
{
AddEvent( EVENT_CONNECTING );
m_iCurrentState = STATE_CONNECTING;
// error check
if (! strcmp (m_szIPADDR, ""))
{
m_iCurrentState = STATE_DISCONNECTED;
return FALSE;
}
if (! m_wPORT)
m_wPORT = PORT_FTP;
m_hINET_SESSION = InternetOpen("UPDATE_FTP", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (m_hINET_SESSION == NULL)
{
// "牢磐齿 楷搬 角菩"
m_iCurrentState = STATE_DISCONNECTED;
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
m_hFTP_CONNECTION =InternetConnect(m_hINET_SESSION, m_szIPADDR, m_wPORT, m_szID, m_szPASS, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (m_hFTP_CONNECTION==NULL)
{
// "FTP 俊 立加且 荐 绝嚼聪促."
InternetCloseHandle(m_hINET_SESSION);
m_iCurrentState = STATE_DISCONNECTED;
AddEvent( EVENT_CONNECT_FAIL );
return FALSE;
}
m_iCurrentState = STATE_CONNECTED;
m_bConnected = TRUE;
AddEvent( EVENT_CONNECT_SUCCESS );
//Connect Check Thread
/*
m_nCheckThreadID = 2;
m_hCheckThread = (HANDLE) _beginthreadex (NULL, NULL, CheckConnectThread, (LPVOID) this, 0, &m_nCheckThreadID);
if (m_hCheckThread == INVALID_HANDLE_VALUE)
{
if (m_lpFN_EventCallbackProc)
{
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
}
*/
return TRUE;
}
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::Connect (LPSTR lpszIPADDR, WORD wPORT, LPSTR lpszID, LPSTR lpszPASS)
{
strcpy (m_szIPADDR, lpszIPADDR);
m_wPORT = wPORT;
if (!lpszID)
strcpy (m_szID, "");
else
strcpy (m_szID, lpszID);
if (!lpszPASS)
strcpy (m_szPASS, "");
else
strcpy (m_szPASS, lpszPASS);
return this->Connect();
}
//捞 何盒篮 StartUpdate甫 龋免沁阑锭客
//龋眠窍瘤 臼疽阑 锭肺 备盒秦具 登瘤 臼阑鳖?
WZ_DECLAREDLL VOID CWZFtpUpdateModule::Disconnect ()
{
m_iCurrentState = STATE_DISCONNECTED;
m_bCancelUpdate = TRUE;
m_bUseEventProc = FALSE;
BOOL bPass = FALSE;
WaitForSingleObject( m_hUpdateThread, 1000 );
if( m_hFTP_CONNECTION )
{
InternetCloseHandle(m_hFTP_CONNECTION);
m_hFTP_CONNECTION = NULL;
}
if( m_hINET_SESSION )
{
InternetCloseHandle(m_hINET_SESSION);
m_hINET_SESSION = NULL;
}
m_bCancelUpdate = FALSE;
m_bUseEventProc = TRUE;
if( m_bConnected )
{
AddEvent( EVENT_DISCONNECT );
m_bConnected = FALSE;
}
}
//lpszLocalPath : 颇老捞抚捞 器窃登瘤 臼篮 鉴荐茄 肺拿 版肺
//lpszRemoteFilePath : 颇老捞抚捞 器窃等 版肺
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::DownloadFile (LPSTR lpszRemoteFilePath, LPSTR lpszLocalPath)
{
eRESULT_CONSTANT eResult;
HANDLE hLocalFile = INVALID_HANDLE_VALUE;
HINTERNET hFTP_FILE = NULL;
//1. 盔拜辑滚 版肺甫 盒籍茄促.
CHAR lpszRemoteDir[MAX_PATH];
CHAR lpszRemoteFileName[MAX_PATH];
GetSplitFilePath( lpszRemoteFilePath, lpszRemoteDir, lpszRemoteFileName );
// 2. 窃荐捞抚 : MakeLocalFileName
CHAR lpszRealLocalFilePath [MAX_PATH];
GetLocalFileName( lpszLocalPath, lpszRemoteFileName, lpszRealLocalFilePath );
//3. 颇老 惑怕 备炼眉俊 泅犁 罐阑 颇老捞抚 历厘
ZeroMemory(m_strtUpdatingFileInfo.szFileName, sizeof(m_strtUpdatingFileInfo.szFileName) );
strcpy( m_strtUpdatingFileInfo.szFileName, lpszRemoteFileName );
__try
{
hLocalFile = MakeLocalFile( lpszRealLocalFilePath );
if(hLocalFile == NULL)
return FALSE;
//////////////////////////////////////////////////////////////////////////
// 盔拜瘤 累诀 弃歹 汲沥
SetRemoteDirectory( lpszRemoteDir );
//////////////////////////////////////////////////////////////////////////
// 盔拜瘤 颇老沥焊 掘扁
DWORD dwFileLength = 0;
FILETIME fileTime;
BOOL bRet = GetRemoteFileInfo( lpszRemoteFileName, dwFileLength, fileTime );
if( bRet == FALSE ) // TRUE甫 窍绰巴篮 FALSE甫 府畔且 版快 ERROR甫 惯积窍扁 锭巩捞促.
return FALSE; // 痹距俊 颇老狼 农扁啊 0牢巴篮 促款肺靛 窍瘤 臼绰促绰 巴阑 器窃窍磊.
//////////////////////////////////////////////////////////////////////////
// 肺拿俊 辑滚俊辑 促款 罐栏妨绰 颇老捞 乐绰瘤 厚背.. 颇老 捞抚/朝楼 厚背
//////////////////////////////////////////////////////////////////////////
// 3 . 盔拜瘤 颇老 凯扁
hFTP_FILE = OpenRemoteFile( lpszRemoteFileName );
if( hFTP_FILE == NULL )
{
DeleteFile (lpszRealLocalFilePath);
return FALSE; // 颇老 窍唱父 角菩秦档 促款肺靛甫 肛勉促.
}
// 惑怕 舅覆 荤侩磊 窃荐啊 瘤沥登菌促搁 咯扁肺 泅犁狼 惑怕甫 舅赴促.(促款肺靛 矫累)
AddEvent( EVENT_FILEDOWNLOAD_START );
//////////////////////////////////////////////////////////////////////////
// 盔拜瘤 颇老 掘扁
eResult = GetRemoteFile( hFTP_FILE, hLocalFile, dwFileLength );
if( eResult != RESULT_DOWNLOAD_SUCCESS )
{
// 颇老 掘扁俊 角菩窍搁, 泅犁 父甸绢柳 肺拿 颇老档 昏力茄促.
DeleteFile (lpszRealLocalFilePath);
return FALSE;
}
//肺拿颇老俊 矫埃 汲沥
SetFileTime(hLocalFile, NULL, NULL, &fileTime);
// 惑怕 舅覆 荤侩磊 窃荐啊 瘤沥登菌促搁 咯扁肺 泅犁狼 惑怕甫 舅赴促.(促款肺靛 场)
AddEvent( EVENT_FILEDOWNLOAD_END );
}
__finally
{
if (hFTP_FILE)
InternetCloseHandle(hFTP_FILE);
if (hLocalFile != INVALID_HANDLE_VALUE)
CloseHandle(hLocalFile);
}
return TRUE;
}
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::GetSplitFilePath(const char* pszFilePath, char* pszDir, char* pszFile)
{
char pszFileName[MAX_PATH];
char pszFileExt[MAX_PATH];
//咯扁辑 辑滚弃歹 炼扒捞 蝶弗促.
//辑滚狼 弃歹绰 风飘俊辑 窍困 1窜拌 鳖瘤父 粮犁茄促.
_splitpath(pszFilePath, NULL, pszDir, pszFileName, pszFileExt );
if(pszDir == NULL || (strcmp(pszDir, "") == 0) )
wsprintf(pszDir, "\\");
wsprintf( pszFile, "%s%s", pszFileName, pszFileExt);
return TRUE;
}
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::GetLocalFileName(const char* pszLocalPath, const char* pszRemoteFileName, char* pszLocalFilePath)
{
// 咯扁辑 肺拿 颇老捞抚捞 绝促搁 盔拜颇老捞抚苞 悼老窍霸 父电促.
if ( (!pszLocalPath) || (! strcmp(pszLocalPath, "")))
wsprintf(pszLocalFilePath, ".\\%s", pszRemoteFileName);
else
{
// 场俊 \ 捞 乐绰瘤 绝绰瘤 八荤秦辑 利侩茄促.
if (pszLocalPath[strlen(pszLocalPath)-1] != '\\')
wsprintf (pszLocalFilePath, "%s\\%s", pszLocalPath, pszRemoteFileName );
else
wsprintf (pszLocalFilePath, "%s%s", pszLocalPath, pszRemoteFileName);
}
return TRUE;
}
WZ_DECLAREDLL HANDLE CWZFtpUpdateModule::MakeLocalFile(const char* pszLocalFilePath)
{
//if( _access(pszLocalFilePath, 0) == 0 ) //父老泅力 肺拿颇老捞 粮犁窍搁.
//{
// BOOL bRet = DeleteFile (pszLocalFilePath);
// if(bRet == FALSE)
// {
// MessageBox (NULL, "颇老昏力 角菩", "皋技瘤", MB_OK);
// }
//}
HANDLE hLocalFile = CreateFile(pszLocalFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hLocalFile == INVALID_HANDLE_VALUE)
{
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
MessageBox (HWND_DESKTOP, this->GetLastErrorMsg(), "Local File Create Error", MB_OK);
return NULL;
}
return hLocalFile;
}
//pszRemoteDir篮 风飘俊 .\ 捞繁 巴捞 救嘿绰促.
//pszRemoteDir篮 风飘俊辑 何磐狼 版肺捞促.
//风飘绰 酒公巴档 救 嘿绰促.
//父老 .\AgentServer\\sss 版肺俊 乐绰 sss 弃歹甫 技泼窍绊 酵栏搁..
//pszRemoteDir篮 AgentServer\\sss 捞 登绢具 茄促.
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::SetRemoteDirectory(const char* pszRemoteDir)
{
DWORD dwSize = 128;
BOOL bSuccess = FALSE;
//1. 风飘肺 汲沥
bSuccess = FtpSetCurrentDirectory( m_hFTP_CONNECTION, "/" );
bSuccess = FtpSetCurrentDirectory( m_hFTP_CONNECTION, pszRemoteDir );
if(!bSuccess)
{
//MessageBox( NULL, szDir, "泅犁叼泛配府", MB_OK );
// 力老 贸澜 哗绊绰 寸楷洒 角菩茄促.
// 角菩窍绰 捞蜡绰 泅犁叼泛配府绰 " /00.00.04 " 捞繁侥栏肺 汲沥登绢 乐绰单,
// 郴啊 汲沥且 叼泛配府绰 ".\00.00.04\ " 捞繁侥栏肺 汲沥窍妨绊 茄促.
// 父老 捞犯霸 窍搁 /00.00.04/00.00.04 叼泛配府甫 茫霸 登骨肺
//DWORD dwError;
//char szMsg[128];
//DWORD nSize = sizeof(szMsg);
//InternetGetLastResponseInfo( &dwError, szMsg, &nSize );
//MessageBox( NULL, szMsg, NULL, MB_OK );
}
else
{
//MessageBox( NULL, szDir, "泅犁叼泛配府", MB_OK );
//MessageBox( NULL, lpszRemoteDir, "官曹 叼泛配府", MB_OK );
}
return bSuccess;
}
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::GetRemoteFileInfo(const char* pszRemoteFile, DWORD& dwFileLength, FILETIME& fileTime)
{
dwFileLength = 0;
WIN32_FIND_DATA wfd;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -