DragonNest/Client/EtFileSystemTool/NxFileSystemTool.cpp

207 lines
8.4 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>
#include "stdafx.h"
#include "NxFileSystemTool.h"
#include "NxFileSystemToolDlg.h"
#include "FileIOThread.h"
#include ".\NxFileSystemTool.h"
#include "StringUtil.h"
#include "BugReporter.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma comment(lib,"dbghelp.lib")
/*
#ifdef _DEBUG
#pragma comment( lib, "zlib_MTd.lib" )
#pragma comment( lib, "EtFileSystem_MTd.lib" )
#else
#pragma comment( lib, "zlib_MT.lib" )
#pragma comment( lib, "EtFileSystem_MT.lib" )
#endif
*/
// CNxFileSystemToolApp
BEGIN_MESSAGE_MAP(CNxFileSystemToolApp, CWinApp)
END_MESSAGE_MAP()
// CNxFileSystemToolApp <EFBFBD><EFBFBD>1<EFBFBD>
CNxFileSystemToolApp::CNxFileSystemToolApp()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>1<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// InitInstance<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ɔ<EFBFBD>\<EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> 0<EFBFBD>X<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //
_CrtMemDumpAllObjectsSince(0);
//_CrtSetBreakAlloc(15359);
}
// <EFBFBD>|<EFBFBD>\<EFBFBD> CNxFileSystemToolApp <EFBFBD><EFBFBD>̅<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CNxFileSystemToolApp theApp;
// CNxFileSystemToolApp <EFBFBD>0<EFBFBD>T<EFBFBD>
BOOL CNxFileSystemToolApp::InitInstance()
{
BugReporter::ReportingServerInfo info;
gs_BugReporter.SetReportingServerInfo(info);
gs_BugReporter.Enable();
CString szCmdLine;
szCmdLine = m_lpCmdLine;
if ( szCmdLine.IsEmpty() == FALSE )
{
tstring szAgrv = m_lpCmdLine;
std::vector<tstring> tokens;
#ifdef _UNICODE
TokenizeW( szAgrv, tokens, _T(" "));
#else
TokenizeA( szAgrv, tokens, _T(" "));
#endif
bool bResult = false;
std::string str;
#ifdef _UNICODE
ToMultiString(tokens[0], str);
#else
str = tokens[0];
#endif
// <EFBFBD>|<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>
// -capa_pak Data 50 (ӹ<EFBFBD>`<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD> D<EFBFBD><EFBFBD>Ƌ<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>
// -folder_pak (ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml D<EFBFBD><EFBFBD>Ƌ<EFBFBD><EFBFBD><EFBFBD>T<EFBFBD>
if ( str == "-capacity_pack")
{
return _CapaPacking(tokens);
}
else if ( str == "-folder_pack" )
{
return _FolderPacking(tokens);
}
}
// <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ȳ<EFBFBD>Ӥ¸<EFBFBD><EFBFBD> ComCtl32.dll <EFBFBD><EFBFBD><EFBFBD> 6 t<EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> D<EFBFBD><EFBFBD>ȼ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD>D<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>ij]<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Windows XP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ܴ<EFBFBD><EFBFBD> InitCommonControls()<EFBFBD> <EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// InitCommonControls()|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD><<EFBFBD>t<EFBFBD> =<EFBFBD>D<EFBFBD> ̹<EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>ŵ<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
InitCommonControls();
CWinApp::InitInstance();
AfxEnableControlContainer();
// \<EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD>
// t<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD><EFBFBD><EFBFBD> \ͅ<EFBFBD> <EFBFBD>‰<EFBFBD> <EFBFBD>|<EFBFBD>X<EFBFBD> l<EFBFBD>0<EFBFBD>|<EFBFBD> <EFBFBD>t<EFBFBD>$<EFBFBD>t<EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD>p<EFBFBD>t<EFBFBD>|<EFBFBD> i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// t<EFBFBD><EFBFBD><EFBFBD> $<EFBFBD><EFBFBD>t<EFBFBD> ȥ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ɤ¸Ҭ<EFBFBD> <EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<EFBFBD>.
// TODO: t<EFBFBD> 8<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD>֬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> p<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>@<EFBFBD>
// <EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>t<EFBFBD>|<EFBFBD> i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SetRegistryKey(_T("\<EFBFBD><EFBFBD><EFBFBD> <51> <04>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȹ<><C8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1C> <00><>1<EFBFBD>\<EFBFBD> <51> <04>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
CNxFileSystemToolDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> U<EFBFBD>x<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ŵ<EFBFBD><EFBFBD>ɔ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>`<EFBFBD>
// T<EFBFBD>ܴ|<EFBFBD> 0<EFBFBD>X<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
}
else if (nResponse == IDCANCEL)
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>͌<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ŵ<EFBFBD><EFBFBD>ɔ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>`<EFBFBD>
// T<EFBFBD>ܴ|<EFBFBD> 0<EFBFBD>X<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
}
// <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><<EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD>‘<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD> <EFBFBD>\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> ]<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>ij]<EFBFBD> FALSE|<EFBFBD> <EFBFBD>X<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
return FALSE;
}
// <EFBFBD><EFBFBD>ɷļ (ӹ<EFBFBD>
BOOL
CNxFileSystemToolApp::_CapaPacking(std::vector<std::string>& tokens)
{
if ( tokens.size() != 5 )
return FALSE;
int nCapa = atoi(tokens[2].c_str());
if ( nCapa < 1 || nCapa > 2000 )
{
nCapa = 50;
}
DIVPackingCapacityInfo info;
info.m_szBaseName = tokens[1].c_str();
info.m_InputPath = tokens[3].c_str();
info.m_OutputPath = tokens[4].c_str();
info.nDivCapacity = nCapa;
g_pDivPackingCapaThread = new CDivPackingCapacityThread(NULL, info);
g_pDivPackingCapaThread->Start();
/*
if ( ::WaitForSingleObject( g_pDivPackingThread->m_hHandleThread, INFINITE ) == WAIT_OBJECT_0 )
{
delete g_pDivPackingThread;
return TRUE;
}*/
if ( g_pDivPackingCapaThread->WaitForTerminate() )
{
delete g_pDivPackingCapaThread;
return TRUE;
}
return FALSE;
}
// <EFBFBD><EFBFBD>T<EFBFBD>\<EFBFBD> (ӹ<EFBFBD>
BOOL
CNxFileSystemToolApp::_FolderPacking(std::vector<std::string>& tokens)
{
if ( tokens.size() != 3 )
return FALSE;
bool bResult = false;
std::vector<_PackingInfo> packingInfo;
std::string str = tokens[1];
bResult = ParseSettingFile(str.c_str(), packingInfo);
if ( bResult == false )
return FALSE;
g_pDivPackingThread = new CDivPackingThread(NULL, CString(tokens[1].c_str()), packingInfo);
g_pDivPackingThread->Start();
/*
if ( ::WaitForSingleObject( g_pDivPackingThread->m_hHandleThread, INFINITE ) == WAIT_OBJECT_0 )
{
delete g_pDivPackingThread;
return TRUE;
}*/
if ( g_pDivPackingThread->WaitForTerminate() )
{
delete g_pDivPackingThread;
return TRUE;
}
return FALSE;
}