Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
768
Tools/PatchMaker/ManualPatchPage.cpp
Normal file
768
Tools/PatchMaker/ManualPatchPage.cpp
Normal file
@@ -0,0 +1,768 @@
|
||||
// ManualPatchPage.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "PatchMaker.h"
|
||||
#include "ManualPatchPage.h"
|
||||
|
||||
#include "UtilityFunc.h"
|
||||
#include "PMSetting.h"
|
||||
#include "PMSettingConstant.h"
|
||||
|
||||
#include "atlenc.h"
|
||||
|
||||
#include <process.h>
|
||||
#include <ZipArchive.h>
|
||||
#include ".\manualpatchpage.h"
|
||||
|
||||
// CManualPatchPage <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
IMPLEMENT_DYNAMIC(CManualPatchPage, CPropertyPage)
|
||||
CManualPatchPage::CManualPatchPage(CPMSetting& pmSetting, DWORD dwPatchVersion)
|
||||
: CPropertyPage(CManualPatchPage::IDD)
|
||||
, m_szMPFolder(_T(""))
|
||||
, m_szMPSFXFile(_T(""))
|
||||
, m_szMPFileName(_T(""))
|
||||
, m_dwMPMinver(0)
|
||||
, m_dwMPMaxver(dwPatchVersion)
|
||||
, m_szPatchType(_T(""))
|
||||
, m_szFileProgress(_T("0/0"))
|
||||
, m_pmSettingOption(pmSetting)
|
||||
, m_hManualPatchThread(0)
|
||||
{
|
||||
m_ProgressData.m_bStopWorkerThread = FALSE;
|
||||
m_ProgressData.m_nTotalFiles = 0;
|
||||
m_ProgressData.m_nAddedFiles = 0;
|
||||
m_ProgressData.m_dwTotalFileSize = 0LL;
|
||||
m_ProgressData.m_dwCurrentFileSize = 0LL;
|
||||
}
|
||||
|
||||
CManualPatchPage::~CManualPatchPage()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CManualPatchPage::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CPropertyPage::DoDataExchange(pDX);
|
||||
DDX_Text(pDX, IDC_ED_MP_MANUAL_PATCH_FILE, m_szMPFolder);
|
||||
DDX_Text(pDX, IDC_ED_MP_MANUAL_SFX_FILE, m_szMPSFXFile);
|
||||
DDX_Text(pDX, IDC_ED_MP_PATCH_FILE_NAME, m_szMPFileName);
|
||||
DDX_Text(pDX, IDC_ED_MP_MIN_VER, m_dwMPMinver);
|
||||
DDX_Text(pDX, IDC_ED_MP_CUR_VER, m_dwMPMaxver);
|
||||
DDX_Text(pDX, IDC_ED_MP_PATCH_TYPE, m_szPatchType);
|
||||
DDX_Control(pDX, IDC_ED_MP_CONSOLE, m_edProgressLog);
|
||||
DDX_Control(pDX, IDC_PRG_MP, m_TotalProgressBar);
|
||||
DDX_Control(pDX, IDC_ED_MP_ERR_CONSOLE, m_edErrLog);
|
||||
DDX_Text(pDX, IDC_ST_MP_PRORGRESS, m_szFileProgress);
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CManualPatchPage, CPropertyPage)
|
||||
ON_BN_CLICKED(ID_MP_CREATE, OnBnClickedMpCreate)
|
||||
ON_BN_CLICKED(ID_MP_CANCEL, OnBnClickedMpCancel)
|
||||
ON_BN_CLICKED(IDC_BTN_MP_SELECT_FILE, OnBnClickedBtnMpSelectFile)
|
||||
ON_WM_CREATE()
|
||||
ON_WM_TIMER()
|
||||
ON_WM_CLOSE()
|
||||
ON_BN_CLICKED(IDC_CLEAR_LOG, OnBnClickedClearLog)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CManualPatchPage <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
struct MPWorkerData
|
||||
{
|
||||
CManualPatchPage* m_lpPage;
|
||||
|
||||
CString m_szMPFolder;
|
||||
CString m_szMPSFXFile;
|
||||
CString m_szMPFileName;
|
||||
CString m_szPatchType;
|
||||
|
||||
DWORD m_dwMPMaxver;
|
||||
DWORD m_dwMPMinver;
|
||||
};
|
||||
|
||||
|
||||
void CManualPatchPage::UpdateManualPatchStatus(MPProgressData& progressData)
|
||||
{
|
||||
//! MANUAL_PATCH_LOCK
|
||||
m_ProgressLock.Lock();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
|
||||
progressData.m_bStopWorkerThread = m_ProgressData.m_bStopWorkerThread;
|
||||
|
||||
m_ProgressData.m_nTotalFiles = progressData.m_nTotalFiles;
|
||||
m_ProgressData.m_nAddedFiles = progressData.m_nAddedFiles;
|
||||
m_ProgressData.m_dwCurrentFileSize = progressData.m_dwCurrentFileSize;
|
||||
m_ProgressData.m_dwTotalFileSize = progressData.m_dwTotalFileSize;
|
||||
|
||||
m_ProgressData.m_ProgressList.AddTail(&progressData.m_ProgressList);
|
||||
m_ProgressData.m_ErrorList.AddTail(&progressData.m_ErrorList);
|
||||
m_ProgressData.m_TotalProgressList.AddTail((&progressData.m_TotalProgressList));
|
||||
|
||||
//! MANUAL_PATCH_UNLOCK
|
||||
m_ProgressLock.Unlock();
|
||||
|
||||
progressData.m_ProgressList.RemoveAll();
|
||||
progressData.m_ErrorList.RemoveAll();
|
||||
}
|
||||
|
||||
template<class FnProcess>
|
||||
bool EnumerateAllLeafFiles(FnProcess fnProcess, LPCTSTR lpRootPath)
|
||||
{
|
||||
CString szTemp;
|
||||
CList<CString> dirStack;
|
||||
CFileFind fileFind;
|
||||
|
||||
szTemp.SetString(lpRootPath);
|
||||
szTemp.Trim();
|
||||
|
||||
int nLength = szTemp.GetLength();
|
||||
|
||||
// <20>ڿ<EFBFBD> \\*.* Ȥ<><C8A4> *.*<2A><> <20>ٿ<EFBFBD> <20>ش<EFBFBD>.
|
||||
szTemp.Append(
|
||||
(1 < nLength && _T('\\') != szTemp.GetString()[nLength - 1])
|
||||
? _T("\\*.*") : _T("*.*"));
|
||||
|
||||
dirStack.AddTail(szTemp);
|
||||
|
||||
BOOL bWorking = FALSE;
|
||||
while(!dirStack.IsEmpty())
|
||||
{
|
||||
szTemp.SetString(dirStack.RemoveTail());
|
||||
if (bWorking = fileFind.FindFile(szTemp))
|
||||
{
|
||||
while(bWorking)
|
||||
{
|
||||
bWorking = fileFind.FindNextFile();
|
||||
if (!fileFind.IsDots())
|
||||
{
|
||||
szTemp.SetString(fileFind.GetFilePath());
|
||||
if (fileFind.IsDirectory())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
szTemp.Append(_T("\\*.*"));
|
||||
dirStack.AddTail(szTemp);
|
||||
}
|
||||
// vssver.scc<63><63> <20><><EFBFBD><EFBFBD> <20><> <20><>
|
||||
else if(0 != szTemp.CompareNoCase(_T("vssver.scc")) && !fnProcess(fileFind))
|
||||
{
|
||||
// <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
class CGetTotalFileNumAndSize
|
||||
{
|
||||
public:
|
||||
|
||||
CGetTotalFileNumAndSize(ULONGLONG& dwTotalFileSize, int& nTotalFileNum)
|
||||
: m_dwTotalFileSize(dwTotalFileSize)
|
||||
, m_nTotalFileNum(nTotalFileNum)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool operator () (const CFileFind& fileFind)
|
||||
{
|
||||
m_dwTotalFileSize += fileFind.GetLength();
|
||||
++m_nTotalFileNum;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
ULONGLONG& m_dwTotalFileSize;
|
||||
int& m_nTotalFileNum;
|
||||
};
|
||||
|
||||
class CCompressFiles
|
||||
{
|
||||
public:
|
||||
|
||||
CCompressFiles(
|
||||
CManualPatchPage& mpPage,
|
||||
MPProgressData& progressData,
|
||||
CZipArchive& zipArchive,
|
||||
CString& szErrorString)
|
||||
: m_MPPage(mpPage)
|
||||
, m_ProgressData(progressData)
|
||||
, m_ZipArchive(zipArchive)
|
||||
, m_szErrorString(szErrorString)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool operator () (const CFileFind& fileFind)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
m_szFileName = fileFind.GetFilePath();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>⺻ <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD>
|
||||
SetFileAttributes(m_szFileName, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_ARCHIVE);
|
||||
if (m_ZipArchive.AddNewFile(m_szFileName, Z_BEST_COMPRESSION, false))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
ULONGLONG dwFileSize = fileFind.GetLength();
|
||||
m_ProgressData.m_dwCurrentFileSize += dwFileSize;
|
||||
++m_ProgressData.m_nAddedFiles;
|
||||
|
||||
PMUtil::SetCurrentTime(m_szErrorString);
|
||||
m_szErrorString.AppendFormat(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> : %s"), m_szFileName);
|
||||
m_ProgressData.m_ProgressList.AddTail(m_szErrorString);
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
DWORD dwError = GetLastError();
|
||||
|
||||
PMUtil::SetCurrentTime(m_szErrorString);
|
||||
m_szErrorString.AppendFormat(_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : %s : "), m_szFileName);
|
||||
PMUtil::AppendErrorMessage(m_szErrorString, dwError);
|
||||
|
||||
m_ProgressData.m_ErrorList.AddTail(m_szErrorString);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ѵ<EFBFBD>.
|
||||
m_MPPage.UpdateManualPatchStatus(m_ProgressData);
|
||||
return (FALSE == m_ProgressData.m_bStopWorkerThread);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
CManualPatchPage& m_MPPage;
|
||||
MPProgressData& m_ProgressData;
|
||||
CZipArchive& m_ZipArchive;
|
||||
CString& m_szErrorString;
|
||||
CString m_szFileName;
|
||||
};
|
||||
|
||||
unsigned __stdcall CManualPatchPage::ManualPatchWorker(void* pArg)
|
||||
{
|
||||
MPWorkerData* lpWorkerData = reinterpret_cast<MPWorkerData*>(pArg);
|
||||
CManualPatchPage* lpPage = lpWorkerData->m_lpPage;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CZipArchive zipArchive;
|
||||
|
||||
CString szSFXFileName;
|
||||
CString szZipFileName;
|
||||
|
||||
CString szErrorString;
|
||||
|
||||
const int MAX_ERROR_LEN = 256;
|
||||
TCHAR szErrorMsg[MAX_ERROR_LEN];
|
||||
|
||||
MPProgressData progressData;
|
||||
progressData.m_bStopWorkerThread = FALSE;
|
||||
progressData.m_dwTotalFileSize = 0LL;
|
||||
progressData.m_dwCurrentFileSize = 0LL;
|
||||
progressData.m_nTotalFiles = 0;
|
||||
progressData.m_nAddedFiles = 0;
|
||||
|
||||
szSFXFileName.SetString(lpWorkerData->m_szMPFileName);
|
||||
szZipFileName.SetString(lpWorkerData->m_szMPFileName);
|
||||
int nPos = szZipFileName.ReverseFind(_T('.'));
|
||||
if (0 < nPos) { szZipFileName.Truncate(nPos); szZipFileName.Append(_T(".zip"), nPos); }
|
||||
|
||||
// <20><>ü <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>뷮<EFBFBD><EBB7AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
if (!EnumerateAllLeafFiles(CGetTotalFileNumAndSize(
|
||||
progressData.m_dwTotalFileSize, progressData.m_nTotalFiles), lpWorkerData->m_szMPFolder))
|
||||
{
|
||||
DWORD dwError = GetLastError();
|
||||
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
if (progressData.m_bStopWorkerThread)
|
||||
{
|
||||
szErrorString.AppendFormat(_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>"));
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorString.AppendFormat(_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> : "));
|
||||
PMUtil::AppendErrorMessage(szErrorString, dwError);
|
||||
}
|
||||
|
||||
progressData.m_ErrorList.AddTail(szErrorString);
|
||||
progressData.m_TotalProgressList.AddTail(szErrorString);
|
||||
}
|
||||
else
|
||||
{
|
||||
TRY
|
||||
{
|
||||
bool bSucceededJob = false;
|
||||
|
||||
zipArchive.Open(szZipFileName, CZipArchive::zipCreate);
|
||||
zipArchive.SetRootPath(lpWorkerData->m_szMPFolder);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20>α״<CEB1> <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if (!EnumerateAllLeafFiles(
|
||||
CCompressFiles(*lpPage, progressData, zipArchive, szErrorString),
|
||||
lpWorkerData->m_szMPFolder))
|
||||
{
|
||||
DWORD dwError = GetLastError();
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
|
||||
if (progressData.m_bStopWorkerThread)
|
||||
{
|
||||
szErrorString.AppendFormat(_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>"));
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorString.AppendFormat(_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> : "));
|
||||
PMUtil::AppendErrorMessage(szErrorString, dwError);
|
||||
}
|
||||
|
||||
progressData.m_ErrorList.AddTail(szErrorString);
|
||||
progressData.m_TotalProgressList.AddTail(szErrorString);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
TODO : <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD>, BASE64<36><34><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> <20><> <20><> Comment<6E><74> <20><><EFBFBD><EFBFBD> <20>ڴ´<DAB4>.
|
||||
|
||||
<20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
1. <20><><EFBFBD><EFBFBD> <20><> <20>뷮 : <20><><EFBFBD><EFBFBD>ũ <20>뷮 üũ
|
||||
2. <20>ּҹ<D6BC><D2B9><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>ִٸ<D6B4>, <20>ּҹ<D6BC><D2B9><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>Ѵ<EFBFBD>.
|
||||
3. <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20>ִٸ<D6B4>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ؼ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>.
|
||||
4. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>ġ
|
||||
*/
|
||||
|
||||
CMemFile srcData;
|
||||
srcData.Write(&progressData.m_dwTotalFileSize, sizeof(progressData.m_dwTotalFileSize));
|
||||
|
||||
// <20><>ġ Ÿ<>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
PMConst::AdjustVersionInfoByPatchType(lpWorkerData->m_szPatchType,
|
||||
lpWorkerData->m_dwMPMinver, lpWorkerData->m_dwMPMaxver);
|
||||
|
||||
srcData.Write(&lpWorkerData->m_dwMPMinver, sizeof(lpWorkerData->m_dwMPMinver));
|
||||
srcData.Write(&lpWorkerData->m_dwMPMaxver, sizeof(lpWorkerData->m_dwMPMaxver));
|
||||
|
||||
int nInstalledPathLen = 0;
|
||||
int nValueNameLen = 0;
|
||||
|
||||
CString szInstalledPath, szValueName;
|
||||
if (PMConst::GetRYLInstalledRegKey(
|
||||
lpWorkerData->m_szPatchType, szInstalledPath, szValueName))
|
||||
{
|
||||
nInstalledPathLen = szInstalledPath.GetLength();
|
||||
nValueNameLen = szValueName.GetLength();
|
||||
|
||||
srcData.Write(&nInstalledPathLen, sizeof(nInstalledPathLen));
|
||||
srcData.Write(&nValueNameLen, sizeof(nValueNameLen));
|
||||
|
||||
srcData.Write(szInstalledPath.GetString(), nInstalledPathLen * sizeof(TCHAR));
|
||||
srcData.Write(szValueName.GetString(), nValueNameLen * sizeof(TCHAR));
|
||||
}
|
||||
else
|
||||
{
|
||||
srcData.Write(&nInstalledPathLen, sizeof(nInstalledPathLen));
|
||||
srcData.Write(&nValueNameLen, sizeof(nValueNameLen));
|
||||
}
|
||||
|
||||
int nSrcLen = static_cast<int>(srcData.GetLength());
|
||||
int nDstLen = Base64EncodeGetRequiredLength(nSrcLen);
|
||||
|
||||
LPSTR lpEncodedData = (LPSTR)malloc(sizeof(CHAR) * (nDstLen + 1));
|
||||
if (0 != lpEncodedData)
|
||||
{
|
||||
BYTE* lpSrcData = srcData.Detach();
|
||||
|
||||
if (Base64Encode(lpSrcData, nSrcLen, lpEncodedData, &nDstLen))
|
||||
{
|
||||
lpEncodedData[nDstLen] = (CHAR)0;
|
||||
|
||||
bSucceededJob =
|
||||
zipArchive.SetGlobalComment(lpEncodedData);
|
||||
}
|
||||
|
||||
free(lpSrcData);
|
||||
free(lpEncodedData);
|
||||
}
|
||||
}
|
||||
|
||||
zipArchive.Close();
|
||||
|
||||
if (!progressData.m_bStopWorkerThread)
|
||||
{
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
szErrorString.AppendFormat(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. SFX<46><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>Դϴ<D4B4>.."));
|
||||
|
||||
progressData.m_ProgressList.AddTail(szErrorString);
|
||||
lpPage->UpdateManualPatchStatus(progressData);
|
||||
|
||||
if (!bSucceededJob)
|
||||
{
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
szErrorString.AppendFormat(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Comment<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"));
|
||||
progressData.m_ErrorList.AddTail(szErrorString);
|
||||
}
|
||||
else
|
||||
{
|
||||
// SFX<46><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
CFile sfxFile, zipFile, resultFile;
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
|
||||
if (!sfxFile.Open(lpWorkerData->m_szMPSFXFile,
|
||||
CFile::modeRead | CFile::shareDenyWrite | CFile::typeBinary))
|
||||
{
|
||||
szErrorString.AppendFormat(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : SFX<46><58><EFBFBD><EFBFBD> %s<><73> <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"),
|
||||
lpWorkerData->m_szMPSFXFile);
|
||||
}
|
||||
else if(!zipFile.Open(szZipFileName,
|
||||
CFile::modeRead | CFile::shareDenyWrite | CFile::typeBinary))
|
||||
{
|
||||
szErrorString.AppendFormat(
|
||||
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : ZIP<49><50><EFBFBD><EFBFBD> %s<><73> <20>б<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"), szZipFileName);
|
||||
}
|
||||
else if(!resultFile.Open(szSFXFileName,
|
||||
CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite | CFile::typeBinary))
|
||||
{
|
||||
szErrorString.AppendFormat(
|
||||
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> %s<><73> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"), szSFXFileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
const int MAX_FILE_BUFFER = 8192;
|
||||
char szTempBuffer[MAX_FILE_BUFFER];
|
||||
|
||||
UINT nReadBytes = 0;
|
||||
UINT nCount = 0;
|
||||
|
||||
progressData.m_dwTotalFileSize =
|
||||
sfxFile.GetLength() + zipFile.GetLength();
|
||||
|
||||
progressData.m_dwCurrentFileSize = 0;
|
||||
|
||||
lpPage->UpdateManualPatchStatus(progressData);
|
||||
|
||||
// <20><><EFBFBD>α<CEB1><D7B8><EFBFBD> <20>ٸ<EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٷ<EFBFBD> <20>ش<EFBFBD>.
|
||||
Sleep(300);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD>Ͽ<EFBFBD> SFX<46><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
while(0 < (nReadBytes = sfxFile.Read(szTempBuffer, MAX_FILE_BUFFER)))
|
||||
{
|
||||
resultFile.Write(szTempBuffer, nReadBytes);
|
||||
progressData.m_dwCurrentFileSize += nReadBytes;
|
||||
if (0 == (++nCount % 10)) { lpPage->UpdateManualPatchStatus(progressData); }
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD>Ͽ<EFBFBD> ZIP<49><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
while(0 < (nReadBytes = zipFile.Read(szTempBuffer, MAX_FILE_BUFFER)))
|
||||
{
|
||||
resultFile.Write(szTempBuffer, nReadBytes);
|
||||
progressData.m_dwCurrentFileSize += nReadBytes;
|
||||
if (0 == (++nCount % 10)) { lpPage->UpdateManualPatchStatus(progressData); }
|
||||
}
|
||||
|
||||
szErrorString.Empty();
|
||||
}
|
||||
|
||||
if (!szErrorString.IsEmpty())
|
||||
{
|
||||
progressData.m_ErrorList.AddTail(szErrorString);
|
||||
lpPage->UpdateManualPatchStatus(progressData);
|
||||
}
|
||||
}
|
||||
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
szErrorString.AppendFormat(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>۾<EFBFBD> <20>Ϸ<EFBFBD> : %d <20><> <20><><EFBFBD><EFBFBD> <20><> %d<><64><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20>۾<EFBFBD><DBBE><EFBFBD> %s<>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>"),
|
||||
progressData.m_nTotalFiles, progressData.m_nAddedFiles,
|
||||
bSucceededJob && progressData.m_nTotalFiles == progressData.m_nAddedFiles ? _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") : _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
|
||||
progressData.m_ProgressList.AddTail(szErrorString);
|
||||
progressData.m_TotalProgressList.AddTail(szErrorString);
|
||||
}
|
||||
}
|
||||
CATCH_ALL(e)
|
||||
{
|
||||
e->GetErrorMessage(szErrorMsg, MAX_ERROR_LEN - 1);
|
||||
szErrorMsg[MAX_ERROR_LEN - 1] = 0;
|
||||
|
||||
PMUtil::SetCurrentTime(szErrorString);
|
||||
if (e->IsKindOf(RUNTIME_CLASS(CZipException)))
|
||||
{
|
||||
szErrorString.AppendFormat(
|
||||
_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : CZipArchive <20><><EFBFBD>̺귯<CCBA><EAB7AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>. %s"), szErrorMsg);
|
||||
}
|
||||
else if (e->IsKindOf(RUNTIME_CLASS(CFileException)))
|
||||
{
|
||||
szErrorString.AppendFormat(
|
||||
_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>. %s"), szErrorMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorString.AppendFormat(
|
||||
_T("<EFBFBD>۾<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><> <20><> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>߽<EFBFBD><DFBD>ϴ<EFBFBD>. %s"), szErrorMsg);
|
||||
}
|
||||
|
||||
progressData.m_ErrorList.AddTail(szErrorString);
|
||||
progressData.m_TotalProgressList.AddTail(szErrorString);
|
||||
|
||||
e->Delete();
|
||||
}
|
||||
END_CATCH_ALL
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ѵ<EFBFBD>.
|
||||
lpPage->UpdateManualPatchStatus(progressData);
|
||||
|
||||
delete lpWorkerData;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CManualPatchPage::OnBnClickedMpCreate()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
UpdateData(TRUE);
|
||||
|
||||
CFile file;
|
||||
|
||||
if (0 == m_szMPFileName.GetLength() ||
|
||||
!file.Open(m_szMPFileName, CFile::modeCreate))
|
||||
{
|
||||
MessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD>ų<EFBFBD>, <20>ùٸ<C3B9> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>ƴմϴ<D5B4>. <20>ٽ<EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"),
|
||||
_T("<EFBFBD>ùٸ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>"), MB_OK | MB_ICONERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
file.Close();
|
||||
DeleteFile(m_szMPFileName);
|
||||
|
||||
if (!theApp.IsManualPatchOperate())
|
||||
{
|
||||
MPWorkerData* lpWorkerData = new MPWorkerData;
|
||||
if (lpWorkerData)
|
||||
{
|
||||
lpWorkerData->m_lpPage = this;
|
||||
lpWorkerData->m_szMPFolder.SetString(m_szMPFolder);
|
||||
lpWorkerData->m_szMPSFXFile.SetString(m_szMPSFXFile);
|
||||
lpWorkerData->m_szMPFileName.SetString(m_szMPFileName);
|
||||
lpWorkerData->m_szPatchType.SetString(m_szPatchType);
|
||||
lpWorkerData->m_dwMPMaxver = m_dwMPMaxver;
|
||||
lpWorkerData->m_dwMPMinver = m_dwMPMinver;
|
||||
|
||||
InitMPWorkerData();
|
||||
|
||||
unsigned int nThreadID = 0;
|
||||
m_hManualPatchThread = reinterpret_cast<HANDLE>(
|
||||
_beginthreadex(0, 0, ManualPatchWorker, lpWorkerData, 0, &nThreadID));
|
||||
|
||||
if (0 == m_hManualPatchThread)
|
||||
{
|
||||
MessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD><EFBFBD>带 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"),
|
||||
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"), MB_OK | MB_ICONERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
static UINT nManualPatchDlgItems[] =
|
||||
{
|
||||
ID_MP_CREATE,
|
||||
IDC_ED_MP_PATCH_FILE_NAME,
|
||||
IDC_BTN_MP_SELECT_FILE
|
||||
};
|
||||
|
||||
PMUtil::EnableDlgItems(*this, nManualPatchDlgItems,
|
||||
sizeof(nManualPatchDlgItems)/sizeof(UINT), false);
|
||||
|
||||
CWnd* lpWnd = GetDlgItem(ID_MP_CANCEL);
|
||||
if (lpWnd) { lpWnd->EnableWindow(TRUE); }
|
||||
|
||||
// <20><><EFBFBD>α<CEB1><D7B8><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
SetTimer(PMConst::MP_PROGRESS_TIMER_ID,
|
||||
PMConst::PROGRESS_TIMER_UPDATE_TIME, 0);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20>ִٰ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
theApp.SetManualPatchOperate(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CManualPatchPage::OnBnClickedMpCancel()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
|
||||
if (theApp.IsManualPatchOperate())
|
||||
{
|
||||
// <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20>۵<EFBFBD><DBB5>ϰ<EFBFBD> <20>ִٸ<D6B4>, <20><><EFBFBD><EFBFBD><EFBFBD>带 <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
StopWorker();
|
||||
}
|
||||
}
|
||||
|
||||
void CManualPatchPage::OnBnClickedBtnMpSelectFile()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
PMUtil::BrowseForNewFile(GetSafeHwnd(),
|
||||
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"),
|
||||
_T("Manual Patch File\0*.exe"), _T("exe"), m_szMPFileName);
|
||||
|
||||
UpdateData(FALSE);
|
||||
}
|
||||
|
||||
BOOL CManualPatchPage::OnSetActive()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE>ɴϴ<C9B4>.
|
||||
|
||||
if (!theApp.IsManualPatchOperate())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
m_pmSettingOption.GetSettingData(PMConst::PatchType, m_szPatchType);
|
||||
m_pmSettingOption.GetSettingData(PMConst::MP_Folder, m_szMPFolder);
|
||||
m_pmSettingOption.GetSettingData(PMConst::MP_SFXFile, m_szMPSFXFile);
|
||||
|
||||
CString szValue;
|
||||
m_pmSettingOption.GetSettingData(PMConst::MP_MinVer, szValue);
|
||||
m_dwMPMinver = atol(szValue);
|
||||
|
||||
UpdateData(FALSE);
|
||||
}
|
||||
|
||||
return CPropertyPage::OnSetActive();
|
||||
}
|
||||
|
||||
BOOL CManualPatchPage::OnInitDialog()
|
||||
{
|
||||
CPropertyPage::OnInitDialog();
|
||||
|
||||
// TODO: <20><><EFBFBD> <20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
|
||||
// Cancel<65><6C>ư<EFBFBD><C6B0> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Disable<6C>Ѵ<EFBFBD>.
|
||||
CWnd* lpWnd = GetDlgItem(ID_MP_CANCEL);
|
||||
if (lpWnd) { lpWnd->EnableWindow(FALSE); }
|
||||
|
||||
m_edProgressLog.SetLimitText(UINT_MAX);
|
||||
m_edErrLog.SetLimitText(UINT_MAX);
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// <20><><EFBFBD><EFBFBD>: OCX <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FALSE<53><45> <20><>ȯ<EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
|
||||
}
|
||||
|
||||
|
||||
|
||||
afx_msg void CManualPatchPage::OnTimer(UINT_PTR nIDEvent)
|
||||
{
|
||||
if (nIDEvent == PMConst::MP_PROGRESS_TIMER_ID)
|
||||
{
|
||||
int nLowerRange = 0;
|
||||
int nUpperRange = 0;
|
||||
int nCurrentPos = m_TotalProgressBar.GetPos();
|
||||
m_TotalProgressBar.GetRange(nLowerRange, nUpperRange);
|
||||
|
||||
//! MANUAL_PATCH_LOCK
|
||||
m_ProgressLock.Lock();
|
||||
|
||||
if (m_ProgressData.m_dwTotalFileSize != nUpperRange)
|
||||
{
|
||||
// <20><>ü Range<67><65> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> - 2.1<EFBFBD>Ⱑ <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>;;
|
||||
m_TotalProgressBar.SetRange32(0,
|
||||
static_cast<int>(m_ProgressData.m_dwTotalFileSize));
|
||||
}
|
||||
|
||||
if (m_ProgressData.m_dwCurrentFileSize != nCurrentPos)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
m_TotalProgressBar.SetPos(
|
||||
static_cast<int>(m_ProgressData.m_dwCurrentFileSize));
|
||||
}
|
||||
|
||||
m_szFileProgress.Format(_T("%d/%d"),
|
||||
m_ProgressData.m_nAddedFiles, m_ProgressData.m_nTotalFiles);
|
||||
|
||||
// <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
POSITION pos = m_ProgressData.m_ProgressList.GetHeadPosition();
|
||||
while(0 != pos) { m_edProgressLog.AddLine(m_ProgressData.m_ProgressList.GetNext(pos)); }
|
||||
|
||||
pos = m_ProgressData.m_TotalProgressList.GetHeadPosition();
|
||||
while(0 != pos) { theApp.AddTotalProgressLog(m_ProgressData.m_TotalProgressList.GetNext(pos)); }
|
||||
|
||||
pos = m_ProgressData.m_ErrorList.GetHeadPosition();
|
||||
while(0 != pos) { m_edErrLog.AddLine(m_ProgressData.m_ErrorList.GetNext(pos)); }
|
||||
|
||||
m_ProgressData.m_ProgressList.RemoveAll();
|
||||
m_ProgressData.m_TotalProgressList.RemoveAll();
|
||||
m_ProgressData.m_ErrorList.RemoveAll();
|
||||
|
||||
//! MANUAL_PATCH_UNLOCK
|
||||
m_ProgressLock.Unlock();
|
||||
|
||||
UpdateData(FALSE);
|
||||
|
||||
if (WAIT_OBJECT_0 == WaitForSingleObject(m_hManualPatchThread, 0))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD>. Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20>ɼ<EFBFBD><C9BC><EFBFBD> Enable<6C>Ѵ<EFBFBD>.
|
||||
StopWorker();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CManualPatchPage::InitMPWorkerData()
|
||||
{
|
||||
m_hManualPatchThread = 0;
|
||||
|
||||
m_ProgressData.m_bStopWorkerThread = FALSE;
|
||||
m_ProgressData.m_nTotalFiles = 0;
|
||||
m_ProgressData.m_nAddedFiles = 0;
|
||||
m_ProgressData.m_ProgressList.RemoveAll();
|
||||
m_ProgressData.m_ErrorList.RemoveAll();
|
||||
}
|
||||
|
||||
void CManualPatchPage::StopWorker()
|
||||
{
|
||||
if (0 != m_hManualPatchThread)
|
||||
{
|
||||
m_ProgressLock.Lock(); //! MANUAL_PATCH_LOCK
|
||||
m_ProgressData.m_bStopWorkerThread = TRUE;
|
||||
m_ProgressLock.Unlock(); //! MANUAL_PATCH_UNLOCK
|
||||
|
||||
WaitForSingleObject(m_hManualPatchThread, INFINITE);
|
||||
CloseHandle(m_hManualPatchThread);
|
||||
|
||||
KillTimer(PMConst::MP_PROGRESS_TIMER_ID);
|
||||
InitMPWorkerData();
|
||||
|
||||
static UINT nManualPatchDlgItems[] =
|
||||
{
|
||||
ID_MP_CREATE,
|
||||
IDC_ED_MP_PATCH_FILE_NAME,
|
||||
IDC_BTN_MP_SELECT_FILE
|
||||
};
|
||||
|
||||
PMUtil::EnableDlgItems(*this, nManualPatchDlgItems,
|
||||
sizeof(nManualPatchDlgItems)/sizeof(UINT), true);
|
||||
|
||||
CWnd* lpWnd = GetDlgItem(ID_MP_CANCEL);
|
||||
if (lpWnd) { lpWnd->EnableWindow(FALSE); }
|
||||
|
||||
theApp.SetManualPatchOperate(false);
|
||||
}
|
||||
}
|
||||
|
||||
void CManualPatchPage::OnClose()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
StopWorker();
|
||||
CPropertyPage::OnClose();
|
||||
}
|
||||
|
||||
void CManualPatchPage::OnBnClickedClearLog()
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
m_edProgressLog.SetWindowText(_T(""));
|
||||
m_edErrLog.SetWindowText(_T(""));
|
||||
}
|
||||
Reference in New Issue
Block a user