190 lines
5 KiB
C++
190 lines
5 KiB
C++
|
|
#include "stdafx.h"
|
|||
|
|
#include "DnServiceModuleKOR.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if defined(_KOR)
|
|||
|
|
|
|||
|
|
#include "../../Extern/Nexon/NMClass/NMSerializable.h"
|
|||
|
|
#include "../../Extern/Nexon/NMClass/NMFiles.cpp"
|
|||
|
|
#include "StringUtil.h"
|
|||
|
|
#define _nmman CNMManager::GetInstance()
|
|||
|
|
#define _nmco CNMCOClientObject::GetInstance()
|
|||
|
|
|
|||
|
|
extern CString g_szOriginalCmdLine;
|
|||
|
|
WiseLog* g_pWiseLog = NULL;
|
|||
|
|
NMGameCode g_uGameCode = 0x0200700D;
|
|||
|
|
|
|||
|
|
BOOL CDnServiceModuleKOR::Initialize()
|
|||
|
|
{
|
|||
|
|
#ifndef _FIRST_PATCH
|
|||
|
|
CFileFind FileFind;
|
|||
|
|
if( FileFind.FindFile( _T( "nmcogame.tmp" ) ) )
|
|||
|
|
ClientDeleteFile( _T( "nmcogame.tmp" ) );
|
|||
|
|
|
|||
|
|
if( FileFind.FindFile( _T( "nmcogame.new" ) ) ) // <20>ٲ<EFBFBD> nmcogame.dll<6C><6C> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü
|
|||
|
|
{
|
|||
|
|
ClientDeleteFile( _T( "nmcogame.dll" ) );
|
|||
|
|
MoveFile( _T( "nmcogame.new" ), _T( "nmcogame.dll" ) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( FileFind.FindFile( _T( "nmconew.tmp" ) ) )
|
|||
|
|
ClientDeleteFile( _T( "nmconew.tmp" ) );
|
|||
|
|
|
|||
|
|
if( FileFind.FindFile( _T( "nmconew.new" ) ) ) // <20>ٲ<EFBFBD> nmconew.dll<6C><6C> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü
|
|||
|
|
{
|
|||
|
|
ClientDeleteFile( _T( "nmconew.dll" ) );
|
|||
|
|
MoveFile( _T( "nmconew.new" ), _T( "nmconew.dll" ) );
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
std::vector<stChannelListSet>::iterator iter = DNPATCHINFO.GetChannelList().begin();
|
|||
|
|
if( iter != DNPATCHINFO.GetChannelList().end() )
|
|||
|
|
{
|
|||
|
|
std::vector<stPartitionListSet>::iterator iter2 = (*iter).m_vecPartitionList.begin();
|
|||
|
|
if( iter2 != (*iter).m_vecPartitionList.end() )
|
|||
|
|
{
|
|||
|
|
if( wcscmp( (*iter2).m_strPartitionName, L"Dragonnest" ) == 0 )
|
|||
|
|
g_uGameCode = 0x0200700D;
|
|||
|
|
else if( wcscmp( (*iter2).m_strPartitionName, L"Dragonnest_Test" ) == 0 )
|
|||
|
|
g_uGameCode = 126996;
|
|||
|
|
else if( wcscmp( (*iter2).m_strPartitionName, L"Dragonnest_OpenTest" ) == 0 )
|
|||
|
|
g_uGameCode = 0x0001F01F;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// nmconew.dll<6C><6C><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> .cfg<66><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COM<4F><4D>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ö鼭 Ȯ<><C8AE><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
|||
|
|
#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
|
|||
|
|
CoInitializeEx( NULL, COINIT_MULTITHREADED );
|
|||
|
|
#else
|
|||
|
|
CoInitialize( NULL );
|
|||
|
|
#endif
|
|||
|
|
if( !InitWiseLog() )
|
|||
|
|
{
|
|||
|
|
CoUninitialize();
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CoUninitialize();
|
|||
|
|
if( g_pWiseLog )
|
|||
|
|
g_pWiseLog->SendWebPost( "gamelauncher.aspx" );
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDnServiceModuleKOR::Destroy()
|
|||
|
|
{
|
|||
|
|
SAFE_DELETE( g_pWiseLog );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CDnServiceModuleKOR::InitWiseLog()
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( _T("InitWiseLog()") );
|
|||
|
|
|
|||
|
|
NMLOCALEID uLocaleId = kLocaleID_KR;
|
|||
|
|
BOOL bResult = TRUE;
|
|||
|
|
// [<5B>ʼ<EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
bResult = CNMCOClientObject::GetInstance().SetLocale(uLocaleId);
|
|||
|
|
|
|||
|
|
if( !bResult )
|
|||
|
|
{
|
|||
|
|
LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( SetLocale )") );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// [<5B>ʼ<EFBFBD>] <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
bResult = CNMCOClientObject::GetInstance().Initialize( g_uGameCode );
|
|||
|
|
|
|||
|
|
if( !bResult )
|
|||
|
|
{
|
|||
|
|
LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( nmco.Initialize )") );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Ŀ<>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20>н<EFBFBD><D0BD><EFBFBD>Ʈ <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ī <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
if( g_szOriginalCmdLine.GetLength() == 0 )
|
|||
|
|
{
|
|||
|
|
LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( CmdLine Emtpy )") );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
std::wstring pCmdline = g_szOriginalCmdLine;
|
|||
|
|
std::vector<std::wstring> tokens;
|
|||
|
|
TokenizeW( pCmdline, tokens, std::wstring( L" " ) );
|
|||
|
|
std::wstring szPassPort;
|
|||
|
|
szPassPort = tokens[0].c_str();
|
|||
|
|
|
|||
|
|
NMLoginAuthReplyCode resultAuth = CNMCOClientObject::GetInstance().AttachAuth( szPassPort.c_str() );
|
|||
|
|
|
|||
|
|
if( resultAuth == kLoginAuth_OK )
|
|||
|
|
{
|
|||
|
|
LogWnd::TraceLog( _T("kLoginAuth_OK success!"));
|
|||
|
|
CNMCOClientObject::GetInstance().GetMyInfo();
|
|||
|
|
UINT32 nMyOid = CNMCOClientObject::GetInstance().GetMyOid();
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
g_pWiseLog = new WiseLog();
|
|||
|
|
if( g_pWiseLog )
|
|||
|
|
g_pWiseLog->Start(nMyOid);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
LogWnd::Log( LogLevel::Error, _T("AttachAuth failed! result %d"), int(resultAuth) );
|
|||
|
|
// LogWnd::Log( LogLevel::Error, _T("AttachAuth failed! result %d, Passport %s"), int(resultAuth), szPassPort.c_str() );
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CNMCOClientObject::GetInstance().LogoutAuth();
|
|||
|
|
CNMCOClientObject::GetInstance().DetachAuth();
|
|||
|
|
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CDnServiceModuleKOR::OnForceFullVersionPatch()
|
|||
|
|
{
|
|||
|
|
BOOL bResult = TRUE;
|
|||
|
|
NMLOCALEID uLocaleId = kLocaleID_KR;
|
|||
|
|
|
|||
|
|
DWORD nErrorCode = 0;
|
|||
|
|
bResult = CNMCOClientObject::GetInstance().SetLocale( uLocaleId );
|
|||
|
|
|
|||
|
|
std::wstring pCmdline = g_szOriginalCmdLine;
|
|||
|
|
std::vector<std::wstring> tokens;
|
|||
|
|
TokenizeW( pCmdline, tokens, std::wstring( L" " ) );
|
|||
|
|
|
|||
|
|
std::wstring szPassPort, szSessionID;
|
|||
|
|
|
|||
|
|
szPassPort = tokens[1].c_str();
|
|||
|
|
|
|||
|
|
for( int i=0; i<(int)tokens.size(); i++ )
|
|||
|
|
{
|
|||
|
|
if( NULL != StrStrW( tokens[i].c_str() , L"/sid:" ) )
|
|||
|
|
szSessionID = tokens[i].c_str() + 5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// [<5B>ʼ<EFBFBD>] <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
|
if( bResult )
|
|||
|
|
{
|
|||
|
|
bResult = CNMCOClientObject::GetInstance().Initialize( g_uGameCode );
|
|||
|
|
|
|||
|
|
if( bResult )
|
|||
|
|
{
|
|||
|
|
bResult = NMCOHelpers::ExecuteNGMInstaller( g_uGameCode, TRUE, TRUE, DNPATCHINFO.GetOptionParameter().GetBuffer(), (WCHAR *)szPassPort.c_str(), (WCHAR*)szSessionID.c_str() );
|
|||
|
|
return bResult;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
nErrorCode = 7002;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
nErrorCode = 7001;
|
|||
|
|
|
|||
|
|
if( !bResult )
|
|||
|
|
{
|
|||
|
|
CString szMsg;
|
|||
|
|
szMsg.Format( _T("<EFBFBD>巡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>缳ġ<E7BCB3><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> : %d"), nErrorCode );
|
|||
|
|
AfxMessageBox( szMsg );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return bResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif // _KOR
|