This commit is contained in:
Cussrro 2024-12-19 14:58:45 +08:00
parent 7baba274e8
commit 06f3a73507
71 changed files with 26468 additions and 943 deletions

View file

@ -14,7 +14,7 @@
#endif // _KR_NEXON
#pragma comment (lib, "setupapi.lib")
#pragma comment (lib, "fdi.lib")
//#pragma comment (lib, "fdi.lib")
extern CString g_szOriginalCmdLine;
@ -26,7 +26,7 @@ extern HANDLE g_hMutex;
#endif // _DEBUG
stDownloadInfoUpdateData g_DownloadInfoData; // 프로세스에서 다운로드 쓰레드의 상태값을 읽기 위한 전역 데이타
stDownloadInfoUpdateData g_DownloadInfoData; // 橇肺技胶俊辑 促款肺靛 静饭靛狼 惑怕蔼阑 佬扁 困茄 傈开 单捞鸥
//////////////////////////////////////////////////////////////////////////
// Thread Base Class
@ -157,17 +157,17 @@ void CDnFistPatchDownloadThread::Run()
{
case FPR_OK:
{
// * 딱 한번 Pak파일에 저장한다 *
// * 迭 茄锅 Pak颇老俊 历厘茄促 *
if( !SaveModuleVersionToPak(DNFIRSTPATCHINFO.GetLocalModuleVersion()) )
{
ErrorMessageBoxLog( _S( STR_PATCH_FAILED + DNPATCHINFO.GetLanguageOffset() ) ); // 패치 실패.
ErrorMessageBoxLog( _S( STR_PATCH_FAILED + DNPATCHINFO.GetLanguageOffset() ) ); // 菩摹 角菩.
}
}
break;
case FPR_FAIL:
{
ErrorMessageBoxLog( _S( STR_PATCH_FAILED + DNPATCHINFO.GetLanguageOffset() ) ); // 패치 실패.
ErrorMessageBoxLog( _S( STR_PATCH_FAILED + DNPATCHINFO.GetLanguageOffset() ) ); // 菩摹 角菩.
CloseThread();
}
break;
@ -185,20 +185,20 @@ void CDnFistPatchDownloadThread::Run()
break;
}
// 스레드 닫기
// 胶饭靛 摧扁
//CloseThread();
}
void CDnFistPatchDownloadThread::ProcessRebootLauncher()
{
// * 딱 한번 Pak파일에 저장한다 *
// * 迭 茄锅 Pak颇老俊 历厘茄促 *
BOOL bSaveResult = SaveModuleVersionToPak(DNFIRSTPATCHINFO.GetLocalModuleVersion());
if(bSaveResult)
{
//if( AfxMessageBox(_T("런처가 패치되었습니다.\n런처를 재실행합니다."), MB_OK, MB_ICONINFORMATION) == IDOK )
//if( AfxMessageBox(_T("繁贸啊 菩摹登菌嚼聪促.\n繁贸甫 犁角青钦聪促."), MB_OK, MB_ICONINFORMATION) == IDOK )
{
CString strParam = DNPATCHINFO.GetTotalParameter(); // 파라매터
CString strExeFile = DNPATCHINFO.GetClientPath(); // 다운로드 경로
CString strParam = DNPATCHINFO.GetTotalParameter(); // 颇扼概磐
CString strExeFile = DNPATCHINFO.GetClientPath(); // 促款肺靛 版肺
strExeFile += DNLAUNCHER_NAME;
#ifdef _USE_COMMAND_LINE
@ -206,7 +206,7 @@ void CDnFistPatchDownloadThread::ProcessRebootLauncher()
#else
ShellExecute( m_hWnd, NULL, strExeFile, strParam.GetBuffer(), NULL, SW_SHOWNORMAL );
#endif
KillMyProcess(_T(DNLAUNCHER_NAME)); // old프로세스 kill.
KillMyProcess(_T(DNLAUNCHER_NAME)); // old橇肺技胶 kill.
}
}
else
@ -220,19 +220,19 @@ FirstPatchReturn CDnFistPatchDownloadThread::BegineModulePatch()
BOOL bModuleResult = FALSE;
BOOL bLauncherResult = FALSE;
// "서버" 버전.
// "辑滚" 滚傈.
int nDownServerVersion = DNPATCHINFO.GetServerVersion();
// "모듈" 버전.
// "葛碘" 滚傈.
int nLocalModuleVersion = DNFIRSTPATCHINFO.GetLocalModuleVersion();
LogWnd::TraceLog(_T("서버버전: [%d] / 모듈버전: [%d]"), nDownServerVersion, nLocalModuleVersion );
LogWnd::TraceLog(_T("辑滚滚傈: [%d] / 葛碘滚傈: [%d]"), nDownServerVersion, nLocalModuleVersion );
if( nLocalModuleVersion == nDownServerVersion ) // * 버전이 같다면, 더이상 진행할 이유가 없음 *
if( nLocalModuleVersion == nDownServerVersion ) // * 滚傈捞 鞍促搁, 歹捞惑 柳青且 捞蜡啊 绝澜 *
{
LogWnd::Log(LogLevel::Error, _T("ModulePatch - Version is Concur"));
return FPR_OK;
}
else if( nLocalModuleVersion > nDownServerVersion ) // * 버전 꼬임. 풀패치로 넘김 *
else if( nLocalModuleVersion > nDownServerVersion ) // * 滚傈 部烙. 钱菩摹肺 逞辫 *
{
LogWnd::Log(LogLevel::Error, _T("ModulePatch - Version Check Failed, Go to FullPatch"));
return FPR_NEED_FULLPATCH;
@ -243,47 +243,47 @@ FirstPatchReturn CDnFistPatchDownloadThread::BegineModulePatch()
return FPR_NEED_FULLPATCH;
}
// * 패치 시작! *
// * 菩摹 矫累! *
for( int i = nLocalModuleVersion ; i < nDownServerVersion ; )
{
if( i < nDownServerVersion )
{
i++;
// 모듈 패치
bModuleResult = DownLoadModulePatch(i); // FirstPatchList.txt 다운로드.
// 葛碘 菩摹
bModuleResult = DownLoadModulePatch(i); // FirstPatchList.txt 促款肺靛.
if(bModuleResult) // FirstPatchList.txt파일이 존재한다면 실행.
if(bModuleResult) // FirstPatchList.txt颇老捞 粮犁茄促搁 角青.
{
if( !ParsingModuleList() ) // "FirstPatchList.txt" 파싱
if( !ParsingModuleList() ) // "FirstPatchList.txt" 颇教
{
return FPR_FAIL;
}
if( !ChangeModuleFiles(i) ) // 모듈 파일 변경.
if( !ChangeModuleFiles(i) ) // 葛碘 颇老 函版.
{
return FPR_FAIL;
}
}
// 런처 패치
bLauncherResult = PatchLauncherFiles(i); // * Launcher.exe파일 다운로드 & 적용 *
// 繁贸 菩摹
bLauncherResult = PatchLauncherFiles(i); // * Launcher.exe颇老 促款肺靛 & 利侩 *
// 현재 모듈 버전을 저장. ( 변수에 저장.. )
// 泅犁 葛碘 滚傈阑 历厘. ( 函荐俊 历厘.. )
DNFIRSTPATCHINFO.SetLocalModuleVersion(i);
// 버전 변경
// 滚傈 函版
CString szPath;
szPath = DNPATCHINFO.GetClientPath();
szPath += CLIENT_VERSION_NAME;
// version.cfg파일에만 저장.
// version.cfg颇老俊父 历厘.
if( !SaveModuleVersionFileWithOutPakSave(szPath, i) )
{
return FPR_FAIL;
}
// DnLuancher.exe가 패치됬다면, 런처 재구동.
// DnLuancher.exe啊 菩摹夌促搁, 繁贸 犁备悼.
if( bLauncherResult )
{
return FPR_LAUNCHER_PATCH;
@ -310,13 +310,13 @@ BOOL CDnFistPatchDownloadThread::DownLoadModulePatch( int nVersion )
CString szPatchListUrl; // PatchURL / FirstPatch / FirstPatchList.txt
szPatchListUrl.Format( _T( "%s%s" ), strUrl.GetBuffer(), FIRSTPATCHLIST_NAME );
// 클라이언트 로컬 파일저장 경로
// 努扼捞攫飘 肺拿 颇老历厘 版肺
m_strPatchListFile.Format( _T( "%s%s" ), DNPATCHINFO.GetClientPath().GetBuffer() , FIRSTPATCHLIST_NAME);
BOOL bResult = DeleteUrlCacheEntry( szPatchListUrl.GetBuffer() );
HRESULT hr = DownloadToFile( szPatchListUrl.GetBuffer(), m_strPatchListFile.GetBuffer() );
// 다운로드에 실패했다면.
// 促款肺靛俊 角菩沁促搁.
if( hr != S_OK )
{
LogWnd::TraceLog( _T("FirstPatch.txt Download Failed!") );
@ -324,7 +324,7 @@ BOOL CDnFistPatchDownloadThread::DownLoadModulePatch( int nVersion )
}
LogWnd::TraceLog( L"FirstPatch.txt File Download Success" );
// 파일 속성 체크.
// 颇老 加己 眉农.
if( ::GetFileAttributes( m_strPatchListFile.GetBuffer() ) == -1 )
{
LogWnd::TraceLog( L"Failed! GetFileAttributes=[%s]", m_strPatchListFile.GetBuffer() );
@ -347,17 +347,17 @@ BOOL CDnFistPatchDownloadThread::PatchLauncherFiles( int nVersion )
strUrl += strVersion;
strUrl += _T("/FirstPatch/");
// Down URL 주소.
// Down URL 林家.
CString szPatchListUrl;
szPatchListUrl.Format( _T( "%s%s" ), strUrl.GetBuffer(), _T(DNLAUNCHER_NAME));
if( !IsExistFile( szPatchListUrl ) )
return FALSE;
// Client 로컬 경로 (저장되는 장소)
// Client 肺拿 版肺 (历厘登绰 厘家)
m_strPatchListFile.Format( _T( "%s%s" ), DNPATCHINFO.GetClientPath().GetBuffer() , _T(DNLAUNCHER_NAME));
// 기존의 확장자 exe를 tmp로 변경한다.
// 扁粮狼 犬厘磊 exe甫 tmp肺 函版茄促.
if( _access(DNLAUNCHER_NAME , 0) == 0 )
{
MoveFile(_T(DNLAUNCHER_NAME), _T(DNLAUNCHER_NAME_TMP));
@ -376,15 +376,15 @@ BOOL CDnFistPatchDownloadThread::PatchLauncherFiles( int nVersion )
}
LogWnd::TraceLog( _T("DnLauncher.exe FIle Download Success") );
// 다운로드에 실패했다면.
// 促款肺靛俊 角菩沁促搁.
if( hr != S_OK )
{
MoveFile(_T(DNLAUNCHER_NAME_TMP), _T(DNLAUNCHER_NAME)); // 'tmp' ---> 'exe'로 다시 복구.
MoveFile(_T(DNLAUNCHER_NAME_TMP), _T(DNLAUNCHER_NAME)); // 'tmp' ---> 'exe'肺 促矫 汗备.
LogWnd::TraceLog( _T("Download DnLauncher.exe File Failed!") );
return FALSE;
}
// 파일 속성 체크.
// 颇老 加己 眉农.
if( ::GetFileAttributes( m_strPatchListFile.GetBuffer() ) == -1 )
{
LogWnd::TraceLog( L"Failed! GetFileAttributes=[%s]", m_strPatchListFile.GetBuffer() );
@ -399,7 +399,7 @@ int CDnFistPatchDownloadThread::ParsingModuleList()
m_vecCopyList.clear();
m_vecDeleteList.clear();
//m_strPostPatchList.Format( _T( "%sFirstPatch%08d.txt" ), DNPATCHINFO.GetClientPath(), m_nServerModuleVersion ); // testLauncher/FirstPatch00000007.txt 이런식.
//m_strPostPatchList.Format( _T( "%sFirstPatch%08d.txt" ), DNPATCHINFO.GetClientPath(), m_nServerModuleVersion ); // testLauncher/FirstPatch00000007.txt 捞繁侥.
HANDLE hFile = CreateFile( m_strPatchListFile.GetBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
@ -409,7 +409,7 @@ int CDnFistPatchDownloadThread::ParsingModuleList()
char cPatchCode, szString[1024], *pFindPtr;
int nFileSize = GetFileSize( hFile, NULL );
char* pBuffer = new char [ nFileSize + 3 ]; // 파일 끝이 없을경우 pBuffer + 2 한 후에 pBuffer 가 쓰레기값이여서 strchr 에서 뻑날 수 있다.
char* pBuffer = new char [ nFileSize + 3 ]; // 颇老 场捞 绝阑版快 pBuffer + 2 茄 饶俊 pBuffer 啊 静饭扁蔼捞咯辑 strchr 俊辑 欢朝 荐 乐促.
memset( pBuffer, 0, nFileSize + 3 );
char* pBufferBackup = pBuffer;
@ -457,7 +457,7 @@ int CDnFistPatchDownloadThread::ParsingModuleList()
CloseHandle( hFile );
SAFE_DELETE_ARRAY( pBufferBackup );
// PostPatchList.txt. 파일삭제
// PostPatchList.txt. 颇老昏力
DeleteFile(m_strPatchListFile);
return true;
@ -473,21 +473,21 @@ int CDnFistPatchDownloadThread::ChangeModuleFiles(int nVer)
std::vector<std::string>::iterator it = m_vecCopyList.begin();
for( ; it != m_vecCopyList.end() ; ++it )
{
// WCHAR로 변환.
// WCHAR肺 函券.
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (*it).c_str(), -1, wszFileName, _MAX_PATH);
// "DnLauncher.exe"는 여기서 처리하지 않는다.
// "DnLauncher.exe"绰 咯扁辑 贸府窍瘤 臼绰促.
if( wcscmp(wszFileName, _T("DnLauncher.exe")) == 0 )
{
continue;
}
// 1. 원본파일이름 변경.
// 1. 盔夯颇老捞抚 函版.
strOriginalFileName.Format(_T("%s%s"), DNPATCHINFO.GetClientPath(), wszFileName);
strBackUpFileName.Format(_T("%s%s%s"), DNPATCHINFO.GetClientPath(), _T("BackUp_"), wszFileName);
rename(CT2A(strOriginalFileName), CT2A(strBackUpFileName));
// 2. 새로운 파일 다운로드.
// 2. 货肺款 颇老 促款肺靛.
m_strFirstPatchURLPath.Format(_T("%s%08d%s%s"), DNPATCHINFO.GetPatchUrl(), nVer, _T("/FirstPatch/"),wszFileName);
HRESULT hr;
@ -498,21 +498,21 @@ int CDnFistPatchDownloadThread::ChangeModuleFiles(int nVer)
if(hr == S_OK)
{
ClientDeleteFile(strBackUpFileName); // "BackUp_파일" 삭제.
ClientDeleteFile(strBackUpFileName); // "BackUp_颇老" 昏力.
break;
}
}
// 3. 실패 : 기존파일 이름 복원.
// 3. 角菩 : 扁粮颇老 捞抚 汗盔.
if( hr != S_OK )
{
rename(CT2A(strBackUpFileName), CT2A(strOriginalFileName)); // 원래 이름으로 복구
rename(CT2A(strBackUpFileName), CT2A(strOriginalFileName)); // 盔贰 捞抚栏肺 汗备
}
}
//-------------------------------------------
// 삭제목록 처리
// 昏力格废 贸府
//-------------------------------------------
std::vector<std::string>::iterator itDelete = m_vecDeleteList.begin();
for( ; itDelete != m_vecDeleteList.end() ; ++itDelete )
@ -542,7 +542,7 @@ BOOL CDnFistPatchDownloadThread::SaveModuleVersionToPak( int nVersion )
char StrVersionName[32]= "\\version.cfg";
WideCharToMultiByte( CP_ACP, 0, szFindPackingFile.GetBuffer(), -1, szTemp, _MAX_PATH, NULL, NULL );
// 어쩔수 없다. 512M 넘어가는것중에 골라서 추가하자.
// 绢驴荐 绝促. 512M 逞绢啊绰巴吝俊 榜扼辑 眠啊窍磊.
if( pPackingFile->OpenFileSystem( szTemp ) )
{
pPackingFile->Remove( StrVersionName );
@ -665,7 +665,7 @@ void CDnPatchDownloadThread::SendStatusMsg( DownloadPatchState nPatchState )
void CDnPatchDownloadThread::Run()
{
LogWnd::TraceLog( L"Patch Start!" );
LogWnd::TraceLog( L"Patch Start!" );
if( m_hWnd == NULL )
return;
@ -684,7 +684,7 @@ void CDnPatchDownloadThread::Run()
{
case PR_OK:
{
LogWnd::TraceLog( L"Patch Success!" );
LogWnd::TraceLog( L"Patch Success!" );
SendStatusMsg( PATCH_COMPLETE );
#if defined(_KR_NEXON)
if( g_pWiseLog ) g_pWiseLog->SendWebPost( "patchend.aspx" );
@ -693,7 +693,7 @@ void CDnPatchDownloadThread::Run()
break;
case PR_LAUNCHER_PATCH:
{
LogWnd::TraceLog( _T( "Launcher Restart because Launcher Patched."));
LogWnd::TraceLog( _T( "Launcher Restart because Launcher Patched."));
#ifndef _DEBUG
if( g_hMutex )
{
@ -715,13 +715,13 @@ void CDnPatchDownloadThread::Run()
break;
case PR_FAIL:
{
LogWnd::TraceLog( L"Patch Failed!" );
LogWnd::TraceLog( L"Patch Failed!" );
SendStatusMsg( PATCH_FAILED );
}
break;
case PR_TERMINATE:
{
LogWnd::TraceLog( L"Patch Terminate!" );
LogWnd::TraceLog( L"Patch Terminate!" );
SendStatusMsg( PATCH_TERMINATE );
}
break;
@ -741,7 +741,7 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
LogWnd::Log( LogLevel::Info, L"Patch Check Version (Client Ver:%d, Server Ver:%d)", nCurClientVersion, nCurServerVersion );
if( nCurClientVersion == -1 || nCurServerVersion == -1 ) // 현재 버전과 서버 버전을 확인을 못했다. 풀패치로 넘어가야한다.
if( nCurClientVersion == -1 || nCurServerVersion == -1 ) // 泅犁 滚傈苞 辑滚 滚傈阑 犬牢阑 给沁促. 钱菩摹肺 逞绢啊具茄促.
{
LogWnd::TraceLog( _T("Version Check Failed Run Fullpatch Process"));
SendStatusMsg( PATCH_CHECK_VERSION_FAILED );
@ -752,11 +752,11 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
if( g_pWiseLog ) g_pWiseLog->WriteToWiseLog( "versioncheckend.aspx" );
#endif // _KR_NEXON
if( nCurClientVersion == nCurServerVersion ) // 서버와 클라이언트 버전이 같으면 패치할 필요가 없다.
if( nCurClientVersion == nCurServerVersion ) // 辑滚客 努扼捞攫飘 滚傈捞 鞍栏搁 菩摹且 鞘夸啊 绝促.
return PR_OK;
else if( nCurClientVersion > nCurServerVersion ) // 클라이언트 버전이 서버 버전보다 크면 풀패치
else if( nCurClientVersion > nCurServerVersion ) // 努扼捞攫飘 滚傈捞 辑滚 滚傈焊促 农搁 钱菩摹
return PR_FULLPATCH;
else // 클라이언트 버전이 낮을 경우 패치 진행
else // 努扼捞攫飘 滚傈捞 撤阑 版快 菩摹 柳青
{
int nDownVersion = nCurClientVersion + 1;
#if defined(_KR_NEXON)
@ -770,7 +770,7 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
g_DownloadInfoData.m_nDownloadProgressMin = 0;
g_DownloadInfoData.m_nDownloadProgressMax = 100;
// 롤백패치 대응 다운받을 버젼을 항시 체크 해서 스킵할 버전이면 스킵한다.
// 费归菩摹 措览 促款罐阑 滚怜阑 亲矫 眉农 秦辑 胶诺且 滚傈捞搁 胶诺茄促.
std::vector<int>::iterator itSkip = std::find( DNPATCHINFO.GetSkipVersion().begin(), DNPATCHINFO.GetSkipVersion().end(), i );
if( itSkip != DNPATCHINFO.GetSkipVersion().end() )
{
@ -779,7 +779,7 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
szPath += CLIENT_VERSION_NAME;
int gap = nCurServerVersion - i;
if( gap >= 1 ) //버젼 차이가 2이상 나면 롤백한 버젼까지 바로 이동
if( gap >= 1 ) //滚怜 瞒捞啊 2捞惑 唱搁 费归茄 滚怜鳖瘤 官肺 捞悼
{
DNPATCHINFO.SetClientVersion( i+1 );
SaveVersionFile( szPath, i+1 );
@ -796,7 +796,7 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
SendStatusMsg( PATCH_DOWNLOAD_DATA );
int nFailCount = 0;
#ifdef _FIRST_PATCH
BOOL bOnlyFirstPatch = FALSE; // 모듈패치만 있는 경우
BOOL bOnlyFirstPatch = FALSE; // 葛碘菩摹父 乐绰 版快
#endif // _FIRST_PATCH
while(1)
@ -804,11 +804,11 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
BOOL bResult = DownLoadPatch( i );
if( bResult )
{
if( m_bTerminateThread ) return PR_TERMINATE; // 다운로드 완료 시 종료 처리 안되면 packing까지 넘어가기 때문에 종료가 오래 걸림
if( m_bTerminateThread ) return PR_TERMINATE; // 促款肺靛 肯丰 矫 辆丰 贸府 救登搁 packing鳖瘤 逞绢啊扁 锭巩俊 辆丰啊 坷贰 吧覆
break;
}
#ifdef _FIRST_PATCH
if( CheckExistFirstPatch( i ) ) // 모듈패치만 있는 패치버전인지 체크
if( CheckExistFirstPatch( i ) ) // 葛碘菩摹父 乐绰 菩摹滚傈牢瘤 眉农
{
bOnlyFirstPatch = TRUE;
break;
@ -824,8 +824,8 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
{
if( i != nCurServerVersion )
{
// 패치 다운로드 실패했고.. 가장 최신패치 다운로드해서 성공하면
// 너무 오래된 버전이라서 이버전의 패치가 삭제 됐으므로 풀버전 다운로드로 넘긴다.
// 菩摹 促款肺靛 角菩沁绊.. 啊厘 弥脚菩摹 促款肺靛秦辑 己傍窍搁
// 呈公 坷贰等 滚傈捞扼辑 捞滚傈狼 菩摹啊 昏力 灯栏骨肺 钱滚傈 促款肺靛肺 逞变促.
CString strPatchFileUrl;
strPatchFileUrl.Format( _T( "%s%08d/Patch%08d.txt" ), DNPATCHINFO.GetPatchUrl().GetBuffer(), nCurServerVersion, nCurServerVersion );
BOOL bResult = DeleteUrlCacheEntry( strPatchFileUrl.GetBuffer() );
@ -855,22 +855,22 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
g_DownloadInfoData.m_nDownloadProgressMin = 0;
g_DownloadInfoData.m_nDownloadProgressMax = 100;
SendStatusMsg( PATCH_APPLY_PAK_FILE ); // 설치 프로그래스 진행을 위해 프로그래스 Min/Max 초기화
SendStatusMsg( PATCH_APPLY_PAK_FILE ); // 汲摹 橇肺弊贰胶 柳青阑 困秦 橇肺弊贰胶 Min/Max 檬扁拳
// 받은 패치를 적용한다.
// 罐篮 菩摹甫 利侩茄促.
nRetValue = ApplyPakPatch();
if( nRetValue == PR_TERMINATE )
break;
#ifdef _USE_RTPATCH
DeleteFolder( m_strRTPatchTempFolder.c_str() ); // RTPatch적용 임시 폴더 삭제
DeleteFolder( m_strRTPatchTempFolder.c_str() ); // RTPatch利侩 烙矫 弃歹 昏力
#endif // _USE_RTPATCH
ClientDeleteFile( m_strPatchListFile.GetBuffer() ); // ApplyPak완료 후 txt파일은 바로 삭제
ClientDeleteFile( m_strPatchListFile.GetBuffer() ); // ApplyPak肯丰 饶 txt颇老篮 官肺 昏力
if( nRetValue == PR_OK || nRetValue == PR_LAUNCHER_PATCH )
{
ClientDeleteFile( m_strPatchFile.GetBuffer() ); // 다운로드 받은 Pak파일은 Apply 성공시에만 삭제
ClientDeleteFile( m_strPatchFile.GetBuffer() ); // 促款肺靛 罐篮 Pak颇老篮 Apply 己傍矫俊父 昏力
LogWnd::TraceLog( _T( "%d Version Patch Apply Success!"), i );
DNPATCHINFO.SetClientVersion( i );
@ -880,16 +880,16 @@ PatchReturn CDnPatchDownloadThread::BeginPatch()
szPath = DNPATCHINFO.GetClientPath();
szPath += CLIENT_VERSION_NAME;
if( !SaveVersionFile( szPath, i ) ) // Version.cfg에 바뀐 버전 저장
if( !SaveVersionFile( szPath, i ) ) // Version.cfg俊 官诧 滚傈 历厘
{
nRetValue = PR_FAIL;
break;
}
if( nRetValue == PR_LAUNCHER_PATCH ) // 런처 패치가 되었다면 중단하고 새 런처를 띄우고 패치한다.
if( nRetValue == PR_LAUNCHER_PATCH ) // 繁贸 菩摹啊 登菌促搁 吝窜窍绊 货 繁贸甫 剁快绊 菩摹茄促.
break;
}
else // 패치하다가 에러 났다.. 첨부터 다시 깔아야 겠다..
else // 菩摹窍促啊 俊矾 车促.. 梅何磐 促矫 彬酒具 摆促..
{
SendStatusMsg( PATCH_APPLY_PAK_FILE_FAILED );
LogWnd::TraceLog( _T( "%d Version Patch Apply Failed!"), i );
@ -981,7 +981,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
LogWnd::TraceLog( L"URLDownload Start" );
HINTERNET hInternetSession;
// 세션 열기
// 技记 凯扁
LogWnd::TraceLog( L"Open Internet Session" );
hInternetSession = InternetOpen( NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );
@ -995,7 +995,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
m_strPatchFile.Format( L"%s%s", strFilePath, strFileName );
m_strPatchFileLocal.Format( L"%s.tmp", m_strPatchFile );
// 다운로드 받기 전 파일은 먼저 체크
// 促款肺靛 罐扁 傈 颇老篮 刚历 眉农
CFile file;
FileCheck filecheck;
DWORD dwDownloadFileSize;
@ -1012,7 +1012,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
if( m_dwTempFileLength < dwDownloadFileSize )
{
// Http 열기
// Http 凯扁
LogWnd::TraceLog( L"Open Http Connection" );
CString strAddHeader;
strAddHeader.Format( L"Range:bytes=%d-\nCache-Control:no-cache\nPragma:no-cache", m_dwTempFileLength );
@ -1032,7 +1032,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
DWORD dwBufferSize = MAX_PATH;
DWORD dwIndex = 0;
// 다운받아야 할 파일 크기 구하기
// 促款罐酒具 且 颇老 农扁 备窍扁
if( HttpQueryInfo( m_hHttpConnection, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)&szBuffer, &dwBufferSize, &dwIndex ) != FALSE )
{
m_dwDownloadFileLength = (DWORD)_wtoi( szBuffer );
@ -1044,7 +1044,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
}
LogWnd::TraceLog( L"DownLoad Left File Size : %d", m_dwDownloadFileLength );
// 다운로드 시작 (이어받기)
// 促款肺靛 矫累 (捞绢罐扁)
if( m_dwDownloadFileLength > 0 )
{
LogWnd::TraceLog( L"Download File Start" );
@ -1102,7 +1102,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
} while( dwRead != 0 );
if( m_bTerminateThread || bError ) // 터미네이트 되었거나 패킷전송 받을 때 오류가 있을 경우
if( m_bTerminateThread || bError ) // 磐固匙捞飘 登菌芭唱 菩哦傈价 罐阑 锭 坷幅啊 乐阑 版快
{
file.Close();
InternetCloseHandle( m_hHttpConnection );
@ -1120,7 +1120,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
if( !bSplitDownload )
{
LogWnd::TraceLog( L"MD5 Check Start" );
// 올바르게 다운로드 되었는지 MD5 Check
// 棵官福霸 促款肺靛 登菌绰瘤 MD5 Check
if( !GetMD5Checksum() )
{
LogWnd::Log( LogLevel::Error, L"MD5 Check Failed!" );
@ -1133,7 +1133,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
}
#else // _USE_SPLIT_COMPRESS_FILE
LogWnd::TraceLog( L"MD5 Check Start" );
// 올바르게 다운로드 되었는지 MD5 Check
// 棵官福霸 促款肺靛 登菌绰瘤 MD5 Check
#ifndef _USA
if( !GetMD5Checksum() )
{
@ -1147,7 +1147,7 @@ HRESULT CDnPatchDownloadThread::URLDownload( LPCTSTR strPatchFileUrl, LPCTSTR st
LogWnd::TraceLog( L"MD5 Check Success" );
#endif // _USE_SPLIT_COMPRESS_FILE
// 정리 tmp -> 원래 파일명
// 沥府 tmp -> 盔贰 颇老疙
CString strNewPatchFileLocal = m_strPatchFileLocal.Left( m_strPatchFileLocal.GetLength() - 4 );
CFile::Rename( m_strPatchFileLocal, strNewPatchFileLocal );
@ -1165,7 +1165,7 @@ FileCheck CDnPatchDownloadThread::CheckPatchFile( HINTERNET hInternetSession, LP
CFile& file, DWORD& dwDownloadFileSize )
#endif // _USE_SPLIT_COMPRESS_FILE
{
// 다운 받을 파일 크기 구하기
// 促款 罐阑 颇老 农扁 备窍扁
dwDownloadFileSize = GetDownloadFileSize( hInternetSession, m_strPatchFileUrl );
if( dwDownloadFileSize == 0 )
@ -1188,7 +1188,7 @@ FileCheck CDnPatchDownloadThread::CheckPatchFile( HINTERNET hInternetSession, LP
g_DownloadInfoData.m_nFileSize = dwDownloadFileSize;
#endif // _USE_SPLIT_COMPRESS_FILE
// 다운 완료된 파일이 있을 경우 유효성 검사
// 促款 肯丰等 颇老捞 乐阑 版快 蜡瓤己 八荤
LogWnd::TraceLog( L"Check Downloaded Temp File" );
CFileException e;
@ -1196,13 +1196,13 @@ FileCheck CDnPatchDownloadThread::CheckPatchFile( HINTERNET hInternetSession, LP
{
DWORD dwFileLength = static_cast<DWORD>( file.GetLength() );
file.Close();
if( dwFileLength == dwDownloadFileSize ) // 이미 다 받아진 파일이 있음
if( dwFileLength == dwDownloadFileSize ) // 捞固 促 罐酒柳 颇老捞 乐澜
{
LogWnd::Log( LogLevel::Error, L"Already Exist Download Temp File!" );
InternetCloseHandle( hInternetSession );
return FIlE_EXIST;
}
else // 받았으나 서버의 파일 정보와 상이할 경우 삭제 후 다시 받음
else // 罐疽栏唱 辑滚狼 颇老 沥焊客 惑捞且 版快 昏力 饶 促矫 罐澜
{
LogWnd::Log( LogLevel::Error, L"Already Exist Download Temp File But Delete Wrong File!" );
if( !ClientDeleteFile( m_strPatchFile ) )
@ -1218,12 +1218,12 @@ FileCheck CDnPatchDownloadThread::CheckPatchFile( HINTERNET hInternetSession, LP
RecordFileExceptionLog( e );
}
// 기존 다운받던 tmp 파일 체크
// 扁粮 促款罐带 tmp 颇老 眉农
FILE* fp;
fp = _wfopen( m_strPatchFileLocal, _T("r") );
UINT uiFileModeFlag = CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone;
if( fp != NULL ) // 다운받던 tmp파일이 있을 경우
if( fp != NULL ) // 促款罐带 tmp颇老捞 乐阑 版快
{
fclose( fp );
uiFileModeFlag |= CFile::modeNoTruncate;
@ -1265,7 +1265,7 @@ DWORD CDnPatchDownloadThread::GetDownloadFileSize( HINTERNET hInternetSession, C
DWORD dwIndex = 0;
DWORD dwFileSize = 0;
// 다운받아야 할 파일 크기 구하기
// 促款罐酒具 且 颇老 农扁 备窍扁
if( HttpQueryInfo( m_hHttpConnection, HTTP_QUERY_CONTENT_LENGTH, (LPVOID)&szBuffer, &dwBufferSize, &dwIndex ) != FALSE )
dwFileSize = (DWORD)_wtoi( szBuffer );
@ -1312,7 +1312,7 @@ BOOL CDnPatchDownloadThread::GetMD5Checksum()
strDownloadChecksum = strDownloadChecksum.Left( nIndex - 1 );
CString strLocalChecksum = CMD5Checksum::GetMD5( m_strPatchFileLocal );
// MD5 비교
// MD5 厚背
return wcscmp( strLocalChecksum, strDownloadChecksum ) == 0 ? TRUE : FALSE;
}
@ -1331,7 +1331,7 @@ BOOL CDnPatchDownloadThread::LoadPatchList()
}
char cPatchCode, szString[1024], *pFindPtr;
int nFileSize = GetFileSize( hFile, NULL );
char *pBuffer = new char [ nFileSize + 3 ]; // 파일 끝이 없을경우 pBuffer + 2 한 후에 pBuffer 가 쓰레기값이여서 strchr 에서 뻑날 수 있다.
char *pBuffer = new char [ nFileSize + 3 ]; // 颇老 场捞 绝阑版快 pBuffer + 2 茄 饶俊 pBuffer 啊 静饭扁蔼捞咯辑 strchr 俊辑 欢朝 荐 乐促.
memset( pBuffer, 0, nFileSize + 3 );
char *pBufferBackup = pBuffer;
@ -1385,14 +1385,14 @@ PatchReturn CDnPatchDownloadThread::PreApplyPakPatch()
{
LogWnd::TraceLog( L"Patch Step 2 - PreApplyPakPatch Start" );
//패치 상태 리스트 정보를 읽어온다.
//菩摹 惑怕 府胶飘 沥焊甫 佬绢柯促.
if( !LoadPatchList() )
{
ErrorMessageBoxLog( _S( STR_PATCH_STATE_LIST_NOT_READ + DNPATCHINFO.GetLanguageOffset() ) );
return PR_FAIL;
}
PatchReturn nRetValue = GetPackingFile(); // 리소스 패킹 파일을 찾고 정보를 가져옴
PatchReturn nRetValue = GetPackingFile(); // 府家胶 菩欧 颇老阑 茫绊 沥焊甫 啊廉咳
if( m_vecPackingFile.empty() )
{
@ -1555,7 +1555,7 @@ PatchReturn CDnPatchDownloadThread::ApplyDeleteList( CEtPackingFile& PatchSource
if( m_vecPackingFile[j]->Remove( szFileName ) )
{
// 삭제 했으면 다음 파일로 넘어간다.
// 昏力 沁栏搁 促澜 颇老肺 逞绢埃促.
m_nCurPatchCount++;
g_DownloadInfoData.m_nDownloadProgressMin = m_nCurPatchCount;
g_DownloadInfoData.m_nDownloadProgressMax = m_nTotalPatchCount;
@ -1566,12 +1566,12 @@ PatchReturn CDnPatchDownloadThread::ApplyDeleteList( CEtPackingFile& PatchSource
if( bIsNoramlFile )
{
#ifdef _TEST // 테스트용 런처의 경우 경로가 임의로 셋팅될 수 있으므로 아래처럼 처리
#ifdef _TEST // 抛胶飘侩 繁贸狼 版快 版肺啊 烙狼肺 悸泼瞪 荐 乐栏骨肺 酒贰贸烦 贸府
TCHAR szCurDir[ _MAX_PATH ]={0,};
GetCurrentDirectory( _MAX_PATH, szCurDir );
SetCurrentDirectory( DNPATCHINFO.GetClientPath() );
#endif // _TEST
//일반 디렉토리 삭제 가능 추가.
//老馆 叼泛配府 昏力 啊瓷 眠啊.
char CheckExe[256]={0 ,};
_GetExt( CheckExe, sizeof(CheckExe), m_vecDeleteList[i].c_str() );
if( strlen( CheckExe ) == 0 )
@ -1625,7 +1625,7 @@ PatchReturn CDnPatchDownloadThread::PatchFileExist( int nPatchFileCount, CEtPack
m_vecPackingFile[i]->RemoveFileInfo( nFindIndex );
int nFindEmptyIndex = m_vecPackingFile[i]->FindSuitableEmptySpace( pFileInfo->dwCompressSize );
if( nFindEmptyIndex == -1 ) // 적당한 공간이 없으면 예약걸기
if( nFindEmptyIndex == -1 ) // 利寸茄 傍埃捞 绝栏搁 抗距吧扁
{
stFileIndexSet fileIndex;
fileIndex.m_dwPakFileNum = i;
@ -1634,7 +1634,7 @@ PatchReturn CDnPatchDownloadThread::PatchFileExist( int nPatchFileCount, CEtPack
m_vecReserveIndex.push_back( fileIndex );
}
else // 적당한 공간이 있다면 패치
else // 利寸茄 傍埃捞 乐促搁 菩摹
{
if( !m_vecPackingFile[i]->PatchFileIndex( pFileHandle, nFindEmptyIndex ) )
{
@ -1646,9 +1646,9 @@ PatchReturn CDnPatchDownloadThread::PatchFileExist( int nPatchFileCount, CEtPack
PatchSource.CloseFile( pFileHandle );
bPatch = TRUE;
}
else // 패치 파일의 크기가 더 클 경우 지우고 빠짐
else // 菩摹 颇老狼 农扁啊 歹 努 版快 瘤快绊 狐咙
{
// 전채 패킹 파일에서 삭제 시도하도록 바꿈
// 傈盲 菩欧 颇老俊辑 昏力 矫档窍档废 官厕
BOOL bRemove = FALSE;
for( int j=0; j<(int)m_vecPackingFile.size(); j++ )
{
@ -1701,13 +1701,13 @@ PatchReturn CDnPatchDownloadThread::PatchFileSuitableSpace( CEtPackingFile& Patc
void CDnPatchDownloadThread::PatchFileReserve( int nPatchFileCount, SPackingFileInfo* pFileInfo )
{
// 패치할 위치를 찾지 못했으면 제일 적당한 위치를 찾아서 넣어준다
// 菩摹且 困摹甫 茫瘤 给沁栏搁 力老 利寸茄 困摹甫 茫酒辑 持绢霖促
int nBestIndex = -1;
DWORD dwMinSize = ULONG_MAX;
for( int j=0; j<(int)m_vecPackingFile.size(); j++ )
{
DWORD dwPackingFileSize = m_vecPackingFile[j]->GetFileSystemSize();
// 512메가 보다는 작아야 밀어 넣을 수 있다
// 512皋啊 焊促绰 累酒具 剐绢 持阑 荐 乐促
if( ( dwPackingFileSize < dwMinSize ) && ( dwPackingFileSize < (DWORD)DEFAULT_PACKING_FILE_SIZE ) )
{
dwMinSize = dwPackingFileSize;
@ -1717,7 +1717,7 @@ void CDnPatchDownloadThread::PatchFileReserve( int nPatchFileCount, SPackingFile
if( nBestIndex == -1 )
{
// 패치할 적당한 파일을 못찾았으면 새로운 패치파일을 만든다.
// 菩摹且 利寸茄 颇老阑 给茫疽栏搁 货肺款 菩摹颇老阑 父电促.
int nStartFileIndex = ( int )m_vecPackingFile.size();
while( 1 )
{
@ -1769,8 +1769,8 @@ PatchReturn CDnPatchDownloadThread::ApplyPatchList( CEtPackingFile& PatchSource
for( int j=0; j<(int)m_vecCopyList.size(); j++ )
{
// 파일이름 앞에.. \ 붙어 있어서 그거 제외한 이름으로 비교해야 제대로 된다.
// 카피리스트에 있는것은 팩에 들어가면 안됨 패스
// 颇老捞抚 菊俊.. \ 嘿绢 乐绢辑 弊芭 力寇茄 捞抚栏肺 厚背秦具 力措肺 等促.
// 墨乔府胶飘俊 乐绰巴篮 蒲俊 甸绢啊搁 救凳 菩胶
if( _stricmp( m_vecCopyList[j].c_str(), pFileInfo->szFileName + 1 ) == 0 )
{
bSkip = TRUE;
@ -1782,14 +1782,14 @@ PatchReturn CDnPatchDownloadThread::ApplyPatchList( CEtPackingFile& PatchSource
continue;
BOOL bPatch = FALSE;
if( PatchFileExist( i, PatchSource, pFileInfo, bPatch ) == PR_FAIL ) // 기존에 존재하는 파일인지 검사해서 패치가능하면 패치
if( PatchFileExist( i, PatchSource, pFileInfo, bPatch ) == PR_FAIL ) // 扁粮俊 粮犁窍绰 颇老牢瘤 八荤秦辑 菩摹啊瓷窍搁 菩摹
return PR_FAIL;
if( !bPatch )
{
if( PatchFileSuitableSpace( PatchSource, pFileInfo, bPatch ) == PR_FAIL ) // 적당한 공간이 있다면 그곳에 패치
if( PatchFileSuitableSpace( PatchSource, pFileInfo, bPatch ) == PR_FAIL ) // 利寸茄 傍埃捞 乐促搁 弊镑俊 菩摹
return PR_FAIL;
if( !bPatch )
PatchFileReserve( i, pFileInfo ); // 기존에 존재하지도 적당한 공간도 없다면 공간이 남은 Pak파일의 뒤에 붙이기 위해서 예약만 걸어둠
PatchFileReserve( i, pFileInfo ); // 扁粮俊 粮犁窍瘤档 利寸茄 傍埃档 绝促搁 傍埃捞 巢篮 Pak颇老狼 第俊 嘿捞扁 困秦辑 抗距父 吧绢狄
}
if( bPatch )
@ -1811,11 +1811,11 @@ PatchReturn CDnPatchDownloadThread::ApplyPatchList( CEtPackingFile& PatchSource
}
}
// 예약된 공간을 비워두고 헤더를 Write
// 抗距等 傍埃阑 厚况滴绊 庆歹甫 Write
for( int j=0; j<(int)m_vecPackingFile.size(); j++ )
m_vecPackingFile[ j ]->WriteReserveFileInfo();
// 예약된 패치파일들 패치
// 抗距等 菩摹颇老甸 菩摹
std::vector<stFileIndexSet>::iterator iter = m_vecReserveIndex.begin();
for( ; iter != m_vecReserveIndex.end(); iter++ )
{
@ -1825,7 +1825,7 @@ PatchReturn CDnPatchDownloadThread::ApplyPatchList( CEtPackingFile& PatchSource
if( pFileHandle == NULL )
return PR_FAIL;
if( !m_vecPackingFile[ (*iter).m_dwPakFileNum ]->PatchFileIndex( pFileHandle, (*iter).m_dwReserveFileIndex, FALSE ) ) // 이미 예약된 FileInfo이므로 FileInfo 갱신하지 않음
if( !m_vecPackingFile[ (*iter).m_dwPakFileNum ]->PatchFileIndex( pFileHandle, (*iter).m_dwReserveFileIndex, FALSE ) ) // 捞固 抗距等 FileInfo捞骨肺 FileInfo 盎脚窍瘤 臼澜
{
LogWnd::Log( LogLevel::Error, L"Patch File Failed!" );
PatchSource.CloseFile( pFileHandle );
@ -1846,7 +1846,7 @@ PatchReturn CDnPatchDownloadThread::ApplyCopyList( CEtPackingFile& PatchSource )
PatchReturn nRetValue = PR_OK;
LogWnd::TraceLog( L"ApplyCopyList" );
#ifdef _TEST // 테스트용 런처의 경우 경로가 임의로 셋팅될 수 있으므로 아래처럼 처리
#ifdef _TEST // 抛胶飘侩 繁贸狼 版快 版肺啊 烙狼肺 悸泼瞪 荐 乐栏骨肺 酒贰贸烦 贸府
TCHAR szCurDirectory[ _MAX_PATH ]={0,};
GetCurrentDirectory( _MAX_PATH, szCurDirectory );
SetCurrentDirectory( DNPATCHINFO.GetClientPath() );
@ -1854,7 +1854,7 @@ PatchReturn CDnPatchDownloadThread::ApplyCopyList( CEtPackingFile& PatchSource )
for( int i=0; i<(int)m_vecCopyList.size(); i++ )
{
//팩안에는 \ 파일앞에 붙기떔시 비교를위해서 붙여준다.
//蒲救俊绰 \ 颇老菊俊 嘿扁嫪矫 厚背甫困秦辑 嘿咯霖促.
char szAddCopyListName[_MAX_PATH]={0,};
sprintf_s( szAddCopyListName, "\\%s", m_vecCopyList[ i ].c_str() );
CEtFileHandle *pFileHandle = PatchSource.OpenFile( szAddCopyListName );
@ -1878,8 +1878,8 @@ PatchReturn CDnPatchDownloadThread::ApplyCopyList( CEtPackingFile& PatchSource )
{
ClientDeleteFile( _T( DNLAUNCHER_NAME_TMP ) );
// DNLAUNCHER_NAME가 존재해야하며, DNLAUNCHER_NAME를 DNLAUNCHER_NAME_TMP로 변경한다.
if( _access( DNLAUNCHER_NAME, 0 ) == 0 && MoveFile( _T( DNLAUNCHER_NAME ), _T( DNLAUNCHER_NAME_TMP ) ) == 0 ) // 런처 파일명을 바꾸고 실행하더라도 런처패치가 되도록 함
// DNLAUNCHER_NAME啊 粮犁秦具窍哥, DNLAUNCHER_NAME甫 DNLAUNCHER_NAME_TMP肺 函版茄促.
if( _access( DNLAUNCHER_NAME, 0 ) == 0 && MoveFile( _T( DNLAUNCHER_NAME ), _T( DNLAUNCHER_NAME_TMP ) ) == 0 ) // 繁贸 颇老疙阑 官操绊 角青窍歹扼档 繁贸菩摹啊 登档废 窃
{
CString strError;
strError.Format( L"%s %d", _S( STR_LAUNCHER_PATCH_FAIL + DNPATCHINFO.GetLanguageOffset() ), 1 );
@ -2000,7 +2000,7 @@ BOOL CDnPatchDownloadThread::SaveNewVersionToPak( int nVersion )
char StrVersionName[32]= "\\version.cfg";
WideCharToMultiByte( CP_ACP, 0, szFindPackingFile.GetBuffer(), -1, szTemp, _MAX_PATH, NULL, NULL );
// 어쩔수 없다. 512M 넘어가는것중에 골라서 추가하자.
// 绢驴荐 绝促. 512M 逞绢啊绰巴吝俊 榜扼辑 眠啊窍磊.
if( pPackingFile->OpenFileSystem( szTemp ) )
{
pPackingFile->Remove( StrVersionName );
@ -2105,7 +2105,7 @@ void CDnPatchDownloadThread::RecordFileExceptionLog( CFileException& e )
static void far* g_pCallBackParam = NULL;
static BOOL g_bInCallBack = FALSE;
static BOOL g_bAbortPatch = FALSE;
static char g_strOriginFileName[_MAX_PATH] = {0,}; // 원본 파일 명 ( ApplyPatch32 실행시 CallBack Function에서 셋팅한다. )
static char g_strOriginFileName[_MAX_PATH] = {0,}; // 盔夯 颇老 疙 ( ApplyPatch32 角青矫 CallBack Function俊辑 悸泼茄促. )
LPVOID CALLBACK EXPORT CDnPatchDownloadThread::RTPatchCALLBACK( UINT Id, LPVOID Param )
{
@ -2237,7 +2237,7 @@ PatchReturn CDnPatchDownloadThread::ApplyRTPatch( CEtPackingFile& PatchSource, C
if( pFileInfo == NULL )
continue;
// rtp파일 export
// rtp颇老 export
if( !ExportFile( PatchSource, pFileInfo->szFileName, m_strRTPatchTempFolder.c_str() ) )
{
CString strFileName( pFileInfo->szFileName );
@ -2262,7 +2262,7 @@ PatchReturn CDnPatchDownloadThread::ApplyRTPatch( CEtPackingFile& PatchSource, C
{
int nFindIndex = m_vecPackingFile[i]->FindFile( strFullPathOriginFileName.c_str() );
if( nFindIndex != -1 ) // rtp파일에 해당하는 파일이 있다면 추출
if( nFindIndex != -1 ) // rtp颇老俊 秦寸窍绰 颇老捞 乐促搁 眠免
{
if( !ExportFile( *m_vecPackingFile[i], strFullPathOriginFileName.c_str(), m_strRTPatchTempFolder.c_str() ) )
{
@ -2278,7 +2278,7 @@ PatchReturn CDnPatchDownloadThread::ApplyRTPatch( CEtPackingFile& PatchSource, C
strFullPathOriginFileName.erase( 0, 1 ); // path/xxx.exe
if( !bFindFile ) // pak파일에서 못찾았다면 클라이언트 폴더에서 찾아본다.
if( !bFindFile ) // pak颇老俊辑 给茫疽促搁 努扼捞攫飘 弃歹俊辑 茫酒夯促.
{
char strClientPath[_MAX_PATH];
WideCharToMultiByte( CP_ACP, 0, DNPATCHINFO.GetClientPath().GetBuffer(), -1, strClientPath, __MAX_PATH, NULL, NULL );
@ -2328,7 +2328,7 @@ PatchReturn CDnPatchDownloadThread::ApplyRTPatch( CEtPackingFile& PatchSource, C
RTPatchSource.ChangeDir( strPath );
}
// RTPatch 적용된 파일을 새 파일시스템에 넣는다.
// RTPatch 利侩等 颇老阑 货 颇老矫胶袍俊 持绰促.
char szApplyPatchFileName[_MAX_PATH];
sprintf_s( szApplyPatchFileName, _MAX_PATH, "%s\\%s", m_strRTPatchTempFolder.c_str(), g_strOriginFileName );
if( !RTPatchSource.AddFile( szApplyPatchFileName ) )
@ -2400,7 +2400,7 @@ HRESULT CDnPatchDownloadThread::DownLoadSplitFile( CString strUrl, int nVersion
int nSplitCountCipher = 1;
if( nSplitCount >= 10 && nSplitCount < 100 )
nSplitCountCipher = 2;
else if( nSplitCount >= 100 ) // 분할파일 100개 넘어갈 일은 없을 것
else if( nSplitCount >= 100 ) // 盒且颇老 100俺 逞绢哎 老篮 绝阑 巴
nSplitCountCipher = 3;
std::vector<DWORD> vecDwSplitFileSizeList;
@ -2493,7 +2493,7 @@ HRESULT CDnPatchDownloadThread::DownLoadSplitFile( CString strUrl, int nVersion
m_strPatchFile.Format( L"%s%s", DNPATCHINFO.GetClientPath(), m_strPatchFileLocal );
LogWnd::TraceLog( L"MD5 Check Start" );
// 올바르게 다운로드 되었는지 MD5 Check
// 棵官福霸 促款肺靛 登菌绰瘤 MD5 Check
if( !GetMD5Checksum() )
{
LogWnd::Log( LogLevel::Error, L"MD5 Check Failed!" );