⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpupdate.cpp

📁 奇迹世界更新程序源代码,其中包括一些文档
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#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 + -