1
This commit is contained in:
parent
7baba274e8
commit
06f3a73507
71 changed files with 26468 additions and 943 deletions
|
|
@ -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!" );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue