#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" ) ) ) // ¹Ù²ï nmcogame.dllÀÌ ÀÖÀ» °æ¿ì ±³Ã¼ { 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" ) ) ) // ¹Ù²ï nmconew.dllÀÌ ÀÖÀ» °æ¿ì ±³Ã¼ { ClientDeleteFile( _T( "nmconew.dll" ) ); MoveFile( _T( "nmconew.new" ), _T( "nmconew.dll" ) ); } #endif std::vector::iterator iter = DNPATCHINFO.GetChannelList().begin(); if( iter != DNPATCHINFO.GetChannelList().end() ) { std::vector::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¿¡¼­ Å×½ºÆ®¼­¹ö°æ·Î ÀúÀåµÈ .cfgÆÄÀÏÀ» ÀÐÀ¸·Á¸é COM°´Ã¼¸¦ ½á¾ßÇϱ⠶§¹®¿¡ È£ÃâÇÔ // À©µµ¿ì ¹öÁ¯ÀÌ ¿Ã¶ó°¡¸é¼­ È®ÀåµÈ ÃʱâÈ­ ÇÔ¼ö¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. #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; // [Çʼö] ·ÎÄÉÀÏ ¼³Á¤ bResult = CNMCOClientObject::GetInstance().SetLocale(uLocaleId); if( !bResult ) { LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( SetLocale )") ); return FALSE; } // [Çʼö] ¸Þ½ÅÀú ¸ðµâ ÃʱâÈ­ bResult = CNMCOClientObject::GetInstance().Initialize( g_uGameCode ); if( !bResult ) { LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( nmco.Initialize )") ); return FALSE; } // Ä¿¸Çµå¶óÀο¡¼­ ÆÐ½ºÆ÷Æ® ½ºÆ®¸µ ÃßÃâÀÌ ¼º°øÇÑ °æ¿ì, À¥·±Äª Çü½ÄÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. if( g_szOriginalCmdLine.GetLength() == 0 ) { LogWnd::Log( LogLevel::Error, _T("NMService intialize failed. ( CmdLine Emtpy )") ); return FALSE; } std::wstring pCmdline = g_szOriginalCmdLine; std::vector 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(); // ¿ÍÀÌÁî ·Î±× ½ÃÀÛ 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 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; } // [Çʼö] ¸Þ½ÅÀú ¸ðµâ ÃʱâÈ­ 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("µå·¡°ï³×½ºÆ® À缳ġ¸¦ ½ÇÆÐÇÏ¿´½À´Ï´Ù. ¿À·ùÄÚµå : %d"), nErrorCode ); AfxMessageBox( szMsg ); } return bResult; } #endif // _KOR