// SunAutoUpdateToolDlg.cpp : ±¸Çö ÆÄÀÏ // #include "stdafx.h" #include #include "SunAutoUpdateTool.h" #include ".\sunautoupdatetooldlg.h" #include #include "BasicLog.h" #include "ParameterPaser.h" #include "UpdateScriptInfo.h" #include #include //PROCESSENTRY32 #ifdef _DEBUG #define new DEBUG_NEW #endif //#define _TEST #define DEFAULT_LOGFILE "UpdateLog" CNetClient g_NetClient; BOOL g_bConnectAgent; CBasicLog g_Log; // ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ­ »óÀÚÀÔ´Ï´Ù. class CAboutDlg : public CDialog { public: CAboutDlg(); // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍ enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿ø // ±¸Çö protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() // CSunAutoUpdateToolDlg ´ëÈ­ »óÀÚ CSunAutoUpdateToolDlg::CSunAutoUpdateToolDlg(CWnd* pParent /*=NULL*/) : CDialog(CSunAutoUpdateToolDlg::IDD, pParent) , m_strVersion(_T("")) , m_strFileName(_T("")) , m_strFileSize(_T("")) , m_strDownFolder(_T("")) , m_strServerName(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); g_bConnectAgent = FALSE; m_nVer1 = 0; m_nVer2 = 0; m_nVer3 = 0; m_nUpdateCount = 0; } void CSunAutoUpdateToolDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_STATIC_VERSION, m_strVersion); DDX_Text(pDX, IDC_STATIC_FILENAME, m_strFileName); DDX_Text(pDX, IDC_STATIC_FILESIZE, m_strFileSize); DDX_Text(pDX, IDC_STATIC_SERVER, m_strServerName); DDX_Control(pDX, IDC_PROGRESS_FILEDOWN, m_progDownload); DDX_Control(pDX, IDC_LIST_STATUS, m_listStatus); } BEGIN_MESSAGE_MAP(CSunAutoUpdateToolDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, OnBnClickedOk) ON_WM_CLOSE() //»ç¿ëÀÚ Á¤ÀÇ ¸Þ¼¼Áö ON_MESSAGE( WM_UPDATE_MODULE_INIT, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_END_SUCCESS, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_END_FAIL, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_VERSION_ALARM, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_LIVE_PROCESS, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_LASTEST_VERSION, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_ERROR, OnCommandMessage ) // ON_MESSAGE( WM_UPDATE_THREAD_FAIL, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_VERSION_CHECK_FAIL, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_NOT_SUPPORT_UPDATE_NUMBER, OnCommandMessage ) ON_MESSAGE( WM_UPDATE_INVALID_PROCESS, OnCommandMessage ) ON_MESSAGE( WM_FTP_CONNECT_SUCCESS, OnCommandMessage ) ON_MESSAGE( WM_FTP_CONNECT_FAIL, OnCommandMessage ) ON_MESSAGE( WM_FTP_DISCONNECT, OnCommandMessage ) ON_MESSAGE( WM_FTP_DIRECTORY_NOTFOUND, OnCommandMessage ) ON_MESSAGE( WM_FTP_FILE_NOTFOUND, OnCommandMessage ) ON_MESSAGE( WM_FTP_FILE_OPEN_FAIL, OnCommandMessage ) ON_MESSAGE( WM_FILE_DOWNLOAD_START, OnCommandMessage ) ON_MESSAGE( WM_FILE_DOWNLOAD_WORKING, OnCommandMessage ) ON_MESSAGE( WM_FILE_DOWNLOAD_END, OnCommandMessage ) ON_MESSAGE( WM_FILE_DOWNLOAD_FAIL, OnCommandMessage ) ON_MESSAGE( WM_FILE_DOWNLOAD_STOP, OnCommandMessage ) ON_MESSAGE( WM_TERMINATE_PROCESS, OnCommandMessage ) ON_MESSAGE( WM_COMMAND_MESSAGE, OnCommandMessage ) ON_WM_TIMER() END_MESSAGE_MAP() // CSunAutoUpdateToolDlg ¸Þ½ÃÁö 󸮱â BOOL CSunAutoUpdateToolDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ ´ëÈ­ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ­ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. m_StringParser.Load( "StringTable.xml" ); //1. ·Î±× ÃʱâÈ­. if( !InitLog() ) return FALSE; AddMessage( "********* Start ************" ); //»ç¿ëÀÚÀÇ À©µµ¿ì¸¦ ¾÷µ¥ÀÌÆ® ¸ðµâ¿¡ ¼³Á¤ÇÑ´Ù. if( !ParsingCommandLine() ) AddMessage( "Parameter Parsing Error!" ); //¾÷µ¥ÀÌÆ® ½ÃÀÛ if( !StartUpdateEx() ) //½ÇÆÐÇϸé..Á¾·áÇÑ´Ù. { AddMessage( "Start Update Failed." ); } return TRUE; // ÄÁÆ®·Ñ¿¡ ´ëÇÑ Æ÷Ä¿½º¸¦ ¼³Á¤ÇÏÁö ¾ÊÀ» °æ¿ì TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù. } void CSunAutoUpdateToolDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // ´ëÈ­ »óÀÚ¿¡ ÃÖ¼ÒÈ­ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é // ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù. void CSunAutoUpdateToolDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼­ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù. dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // »ç¿ëÀÚ°¡ ÃÖ¼ÒÈ­µÈ âÀ» ²ô´Â µ¿¾È¿¡ Ä¿¼­°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼­ // ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. HCURSOR CSunAutoUpdateToolDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } //ÇÁ·Î¼¼¼­¸¦ Á¾·á½ÃŰ´Â ¹öư.. void CSunAutoUpdateToolDlg::OnBnClickedOk() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. Release(); CDialog::OnOK(); } BOOL CSunAutoUpdateToolDlg::InitNetwork( TCHAR* pszIP, WORD wPort ) { BOOL bRet = FALSE; DWORD dwErrorCode = 0; bRet = g_NetClient.Init( dwErrorCode ); if( bRet == FALSE ) { CString strError; strError.Format("¼ÒÄÏ»ý¼º¿¡·¯ ERROR CODE = %u", dwErrorCode ); return FALSE; } bRet = g_NetClient.Connect( pszIP, wPort, dwErrorCode ); if( bRet == FALSE ) { CString strError; strError.Format("RTTA¿¬°á ¿¡·¯ ERROR CODE = %u", dwErrorCode ); AddMessage( (LPSTR)strError.GetString() ); //¼öµ¿¸ðµå·Î.. g_NetClient.DisConnect(); return FALSE; } return TRUE; } long CSunAutoUpdateToolDlg::OnFileDownloadFail( WPARAM wParam, LPARAM lParam ) { //CUpdateFileInfo* pInfo = (CUpdateFileInfo*)wParam; //if( !pInfo ) //{ // AddMessage("[¸Þ¼¼Áö ¿¡·¯] WM_FTP_FILE_DOWNLOAD_FAIL" ); // OnBnClickedOk(); //} //TCHAR szFileName[MAX_PATH_SIZE]; //pInfo->GetFileName( szFileName, MAX_PATH_SIZE ); //AddMessage( "ÆÄÀÏ ¹Þ±â ½ÇÆÐ(¿¬°á¿¡ ¹®Á¦°¡ ÀÖÀ»¼ö ÀÖ½À´Ï´Ù.) FileName = %s ", szFileName ); //// ¾ËƼƼ ¿¬°áµÇ¾î ÀÖ´Â »óÅ¿¡¼­ ÆÄÀÏ ´Ù¿î·Îµå ½ÇÆÐ¸é.. //// ·±Ã³µç ¾îÇø®ÄÉÀ̼ÇÀÌµç ¾ËÆ¼Æ¼¿¡ ¸Þ¼¼Áö¸¦ º¸³½´Ù. ±×¸®°í ÇÁ·Î¼¼¼­ Á¾·áÇÑ´Ù. //if( g_bConnectAgent == TRUE ) //{ // BOOL bRet = SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_DOWNLOAD_FAIL ); // OnBnClickedOk(); //} return 0; } void CSunAutoUpdateToolDlg::SetTitle(void) { CString strTitle; CString strLauncher; if( m_StartManager.GetLauncherStartType() == START_TYPE_NORMAL ) strLauncher = ", NORMAL"; else if( m_StartManager.GetLauncherStartType() == START_TYPE_LAUNCHER ) strLauncher = ", LAUNCHER"; strTitle.Format( "SunAutoUpdateTool(Ver:%d-%d-%d) %s(%s)", HIGH_VERSION, MIDDLE_VERSION, LOW_VERSION, strLauncher, g_bConnectAgent ? "CONNECT-AGENT" : "DISCONNECT-AGENT" ); SetWindowText( strTitle ); } BOOL CSunAutoUpdateToolDlg::InitLog() { // ·Î±× ÃʱâÈ­. TCHAR szDir[MAX_PATH]; m_StartManager.GetModuleDirectory( szDir, MAX_PATH ); if( !g_Log.Init( szDir, DEFAULT_LOGFILE ) ) { AfxMessageBox("LOG ¸ðµâ ÃʱâÈ­ ½ÇÆÐ"); return FALSE; } return TRUE; } BOOL CSunAutoUpdateToolDlg::ConnectAgent( TCHAR* pszIP, WORD wPort ) { if( InitNetwork( pszIP, wPort ) ) //ÀÚµ¿¸ðµå { AddMessage( "RTTA ¿¬°á ¼º°ø" ); //RTTA¿Í ¿¬°áµÇ¾úÀ¸¹Ç·Î RTTA¸¦ °¡µ¿½ÃŲ´Ù. g_NetClient.Run(); } else return FALSE; return TRUE; } void CSunAutoUpdateToolDlg::SetWndHandle() { HWND hDlgWnd = GetSafeHwnd(); m_UpdateManager.SetWndHandle( hDlgWnd ); } BOOL CSunAutoUpdateToolDlg::ParsingCommandLine() { TCHAR* pCmd = GetCommandLine(); AddMessage( pCmd ); return m_StartManager.Init( pCmd ); } void CSunAutoUpdateToolDlg::AddMessage( char* pszMsg, ... ) { int nSize = (int)strlen( pszMsg ); static char szBuffer[256]; szBuffer[0] = '0'; va_list args; va_start(args, pszMsg); _vsnprintf( szBuffer, 256, pszMsg, args ); va_end(args); m_listStatus.AddString( szBuffer ); int nCount = m_listStatus.GetCount(); m_listStatus.SetCurSel( nCount ); g_Log.InsertMessage( szBuffer ); } //byPatchNumÀº ÆÐÄ¡ ¼ø¼­ÀÌ´Ù. 1°³¸¸ ÆÐÄ¡ ÇßÀ»¶§´Â 0À̰í. //2°³ ÀÌ»ó ÆÐÄ¡ÇßÀ» °æ¿ì¿¡´Â, ¿Ï·áµÇ´Â ¼ø¼­´ë·Î, 0, 1, 2.. ÀÌ·±½ÄÀ¸·Î Áõ°¡ÇÑ´Ù. BOOL CSunAutoUpdateToolDlg::SendRTTAMessage( DWORD dwErrorCode, BYTE byServerType, BYTE byPatchNum, CVersionInfo& rVerInfo ) { if( !g_bConnectAgent || byServerType == MAX_SERVER ) return FALSE; MSG_MO_RTTG_PATCHRESULT_ANS msg; msg.dwError = dwErrorCode; msg.byNum = byPatchNum; msg.byServerType = byServerType; //Key°ªÀº RTTAÀ̸é, óÀ½ RTTA°¡ ÁØ °ªÀ» ¾²¸é µÇ¸ç, //UpdateAgent¸é.. À¯Àú۰¡ ³¯¶ó¿À¹Ç·Î, ±× °ªÀ» ÀüÇÏ¸é µÈ´Ù. if( CUpdateScriptParser::GetInstance()->GetAgentInfo().m_byAgentMode == 0 ) //RTTA msg.dwKey = g_NetClient.m_dwKey; else if( CUpdateScriptParser::GetInstance()->GetAgentInfo().m_byAgentMode == 1 ) //UpdateAgent msg.dwKey = m_StartManager.GetParamKey(); msg.byVer1 = rVerInfo.GetVersion( 0 ); msg.byVer2 = rVerInfo.GetVersion( 1 ); msg.byVer3 = rVerInfo.GetVersion( 2 ); int nErrorCode = 0; int nSize = sizeof(msg); int nRetSize = g_NetClient.SendData( (char*)&msg, nSize, nErrorCode ); BOOL bRet = (nRetSize != -1) ? TRUE : FALSE; if( bRet ) { AddMessage( "[AgentSend] ErrorCode = %s, Num = %d, ServerType = %d, ver=%d.%d.%d, key = %d, SendSize = %d, RetSize = %d", GetRttaResultStr( msg.dwError ).GetString(), msg.byNum, msg.byServerType, msg.byVer1, msg.byVer2, msg.byVer3, msg.dwKey, nSize, nRetSize ); } return bRet; } CString CSunAutoUpdateToolDlg::GetRttaResultStr( DWORD dwMsg ) { CString strMsg; switch( dwMsg ) { case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_PATCHSUCCESS : strMsg = "ÆÐÄ¡¼º°ø"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_PROCESSRUN : strMsg = "ÇÁ·Î¼¼¼­°¡ »ì¾ÆÀÖÀ½"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_FTPCONNECT_FAIL : strMsg = "FTP¿¬°á½ÇÆÐ"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_DOWNLOAD_FAIL : strMsg = "´Ù¿î·Îµå ½ÇÆÐ"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_FILENOTFOUND : strMsg = "FILE NOT FOUND"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_INVALID_SERVERTYPE : strMsg = "INVALID SERVER TYPE"; break; case MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_LASTEST_VERSION : strMsg = "ÃֽŹöÀüÀÓ"; break; default: strMsg = "¾Ë¼ö¾ø´Â °á°ú"; break; } return strMsg; } long CSunAutoUpdateToolDlg::OnCommandMessage( WPARAM wParam, LPARAM lParam ) { TCHAR szMsg[MAX_PATH]; ZeroMemory( szMsg, MAX_PATH ); CUpdateFolderInfo* pFolderInfo = NULL; CUpdateFileInfo* pFileInfo = NULL; CVersionInfo* pVersion = NULL; PROCESS_INFO* pProcessInfo = NULL; CVersionInfo VersionInfo; UPDATE_INFO* pUpdateInfo = NULL; UPDATE_FILE_INFO* pUpdateFileInfo = NULL; double dResult = 0; BYTE byUpdateNum = 0; BYTE byServerType = 0; std::string strMsg; m_StringParser.GetMessage( (DWORD)(wParam - WM_USER), strMsg ); switch( wParam ) { //UPDATE case WM_UPDATE_MODULE_INIT : AddMessage( "FTP Module Init" ); break; case WM_UPDATE_END_SUCCESS: pProcessInfo = (PROCESS_INFO*)lParam; VersionInfo.SetVersionFromString( pProcessInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pProcessInfo->m_szProcessName ); AddMessage( "%s : %s = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_PATCHSUCCESS, byServerType, pProcessInfo->m_byUpdateSequence, VersionInfo); break; case WM_UPDATE_END_FAIL: pProcessInfo = (PROCESS_INFO*)lParam; VersionInfo.SetVersionFromString( pProcessInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pProcessInfo->m_szProcessName ); AddMessage( "%s : %s = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_PATCHFAIL, byServerType, pProcessInfo->m_byUpdateSequence, VersionInfo); break; case WM_UPDATE_VERSION_ALARM: pUpdateInfo = (UPDATE_INFO*)lParam; AddMessage( "%s : %s Ver = %s", pUpdateInfo->m_szProcessName, strMsg.c_str(), pUpdateInfo->m_szProcessVer ); break; case WM_UPDATE_LIVE_PROCESS: pProcessInfo = (PROCESS_INFO*)lParam; VersionInfo.SetVersionFromString( pProcessInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pProcessInfo->m_szProcessName ); AddMessage( "%s : %s Ver = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_PROCESSRUN, byServerType, pProcessInfo->m_byUpdateSequence, VersionInfo); break; case WM_UPDATE_LASTEST_VERSION: pProcessInfo = (PROCESS_INFO*)lParam; VersionInfo.SetVersionFromString( pProcessInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pProcessInfo->m_szProcessName ); AddMessage( "%s : %s Ver = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_LASTEST_VERSION, byServerType, pProcessInfo->m_byUpdateSequence, VersionInfo); break; case WM_UPDATE_ERROR: pProcessInfo = (PROCESS_INFO*)lParam; AddMessage( "%s : %s Ver = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); break; case WM_UPDATE_VERSION_CHECK_FAIL: pProcessInfo = (PROCESS_INFO*)lParam; VersionInfo.SetVersionFromString( pProcessInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pProcessInfo->m_szProcessName ); AddMessage( "%s : %s Ver = %s ", pProcessInfo->m_szProcessName, strMsg.c_str(), pProcessInfo->m_szProcessVer ); break; case WM_UPDATE_NOT_SUPPORT_UPDATE_NUMBER: byUpdateNum = (BYTE)lParam; AddMessage( "%s UpdateNumber = %d ", strMsg.c_str(), byUpdateNum ); break; case WM_UPDATE_INVALID_PROCESS: byServerType = (BYTE)lParam; AddMessage( "%s = %d", strMsg.c_str(), byServerType ); VersionInfo.SetVersionFromString( "0.0.0" ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_INVALID_SERVERTYPE, byServerType, 0, VersionInfo); break; //FTP case WM_FTP_CONNECT_SUCCESS: strncpy( szMsg, (TCHAR*)lParam, MAX_PATH ); AddMessage( "%s : %s", szMsg, strMsg.c_str() ); break; case WM_FTP_CONNECT_FAIL: strncpy( szMsg, (TCHAR*)lParam, MAX_PATH ); AddMessage( "%s : %s", szMsg, strMsg.c_str() ); VersionInfo.SetVersionFromString("0.0.0"); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_FTPCONNECT_FAIL, 1, 0, VersionInfo); break; case WM_FTP_DISCONNECT: strncpy( szMsg, (TCHAR*)lParam, MAX_PATH ); AddMessage( "%s : %s", szMsg, strMsg.c_str() ); break; case WM_FTP_DIRECTORY_NOTFOUND: pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; VersionInfo.SetVersionFromString( pUpdateFileInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pUpdateFileInfo->m_szProcessName ); AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_DOWNLOAD_FAIL, byServerType, pUpdateFileInfo->m_byUpdateSequence, VersionInfo); break; case WM_FTP_FILE_NOTFOUND: //FTP¿¡ ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; VersionInfo.SetVersionFromString( pUpdateFileInfo->m_szProcessVer ); byServerType = m_StartManager.GetServerTypeFromServerName( pUpdateFileInfo->m_szProcessName ); AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); SendRTTAMessage( MSG_MO_RTTG_PATCHRESULT_ANS::ERROR_FILENOTFOUND, byServerType, pUpdateFileInfo->m_byUpdateSequence, VersionInfo); break; case WM_FTP_FILE_OPEN_FAIL: //FTP¿¡ ÆÄÀÏÀº Á¸ÀçÇϴµ¥, ¿­±â¿¡ ½ÇÆÐÇÏ¿´´Ù. pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); break; //FILE case WM_FILE_DOWNLOAD_START: pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); break; case WM_FILE_DOWNLOAD_END: pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); break; case WM_FILE_DOWNLOAD_FAIL: pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); break; case WM_FILE_DOWNLOAD_WORKING: pFileInfo = (CUpdateFileInfo*)lParam; m_strFileName = pFileInfo->GetFileName(); m_strFileSize.Format( "%d / %d Bytes", pFileInfo->GetWholeFileSize(), pFileInfo->GetNowFileSize() ); dResult = (double)(pFileInfo->GetNowFileSize()*100) / (double)pFileInfo->GetWholeFileSize(); m_progDownload.SetPos( (int)dResult ); UpdateData( FALSE ); break; case WM_FILE_DOWNLOAD_STOP: pUpdateFileInfo = (UPDATE_FILE_INFO*)lParam; AddMessage( "%s : %s(%s)", pUpdateFileInfo->m_szProcessName, strMsg.c_str(), pUpdateFileInfo->m_szFileName ); break; //ETC case WM_TERMINATE_PROCESS: AddMessage( "%s", strMsg.c_str() ); SetTimer( WM_TERMINATE_PROCESS, 100, NULL ); break; case WM_COMMAND_MESSAGE: strncpy( szMsg, (TCHAR*)lParam, MAX_PATH ); AddMessage( szMsg ); break; default: return 0; } return 0; } void CSunAutoUpdateToolDlg::Release() { AddMessage("¾÷µ¥ÀÌÆ®ÅøÀ» Á¾·áÇÕ´Ï´Ù."); m_UpdateManager.Release(); g_Log.CloseLog(); g_NetClient.Close(); m_StringParser.Release(); } BOOL CSunAutoUpdateToolDlg::StartUpdateEx() { // ÆÄ¼­ ÆÄ½Ì if( !CUpdateScriptParser::GetInstance()->LoadData() ) return FALSE; //À©µµ¿ì ÇÚµé µî·Ï. SetWndHandle(); //AGENT NETWORK ÃʱâÈ­ AGENT_INFO& rAgentInfo = CUpdateScriptParser::GetInstance()->GetAgentInfo(); g_bConnectAgent = ConnectAgent( rAgentInfo.m_szAgentIP, rAgentInfo.m_wAgentPort ); //¾÷µ¥ÀÌÆ® ¸Å´ÏÁ® ÃʱâÈ­ //LAUNCHER ·Î ½ÃÀ۵Ǵ °æ¿ì´Â LAUNCHER¸¦ ¾÷µ¥ÀÌÆ® ½Ãų Çʿ䰡 ÀÖ´Â °æ¿ìÀÌ´Ù. ·±Ã³¸¦ ¾÷µ¥ÀÌÆ® ÇÏ°í ¹Ù·Î Á¾·áÇÑ´Ù. //SubÆÄ¶ó¹ÌÅͰ¡ ÀÖ´Ù´Â °ÍÀº ½ºÅ©¸³Æ®¸¦ Àû¿ëÇÏÁö ¾Ê°í, ÆÄ¶ó¹ÌÅÍ·Î °áÁ¤Çϰڴٴ ¶æÀÌ´Ù. BYTE bySubParamCnt = m_StartManager.GetSubParameterCount(); BOOL bApplyScript = FALSE; BYTE byManualAppUpdateNumber = 0; //¼öµ¿ ¾îÇø®ÄÉÀÌ¼Ç ¾÷µ¥ÀÌÆ® ³Ñ¹ö. TCHAR szSubParam[MAX_PATH]; ZeroMemory( szSubParam, MAX_PATH ); //¼­ºê ÆÄ¶ó¹ÌÅͰ¡ ¾ø°Å³ª, À־ ¼­¹öŸÀÔÀÌ 0 ÀÌ¿©¼­ ¼³Á¤µÈ Àüü°ª ÆÐÄ¡À̸é. if ( bySubParamCnt == 0 || m_StartManager.GetParamServerType() == 0 ) { bApplyScript = TRUE; byManualAppUpdateNumber = 0; //bApplyScript°¡ TRUEÀ̸é, ÀÌ ÀÎÀÚ´Â Àû¿ëµÇÁö ¾Ê´Â´Ù. } else //¼­¹ö ÆÄ¶ó¹ÌÅͰ¡ ÀÖ°í, ÀϺκРÆÐÄ¡ÀÌ´Ù. { bApplyScript = FALSE; TCHAR szServerName[MAX_PATH]; if( !m_StartManager.GetServerNameFromServerType( m_StartManager.GetParamServerType(), szServerName, MAX_PATH ) ) return FALSE; #ifdef __20080402_ADD_SOLARSCUPDATE_ if( strcmp(szServerName, "SolarAuthServer") == 0 ) { bApplyScript = TRUE; byManualAppUpdateNumber = 0; } else { #endif byManualAppUpdateNumber = CUpdateScriptParser::GetInstance()->GetUpdateNumFromProcName( UPDATE_TYPE_APPLICATION, szServerName ); if( byManualAppUpdateNumber == 0 ) { //µé¾î¿Â ¼­¹öŸÀÔ¿¡ ÇØ´çÇÏ´Â °ªÀÌ, Åø¿¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é.. //À߸øµÈ °ªÀÌ µé¾î¿Â°Å´Ù. //¿©±â¿¡ µé¾î¿À¸é Çϳª¸¸ ÆÐÄ¡ÇÏ´Â °ÍÀ̹ǷÎ, seq´Â 0À¸·Î ÇÑ´Ù. //´ç¿¬È÷ ¼­¹öŸÀÔÀÌ ¾øÀ¸¹Ç·Î, ¹öÀüµµ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. PostMessage( WM_UPDATE_INVALID_PROCESS, WM_UPDATE_INVALID_PROCESS, m_StartManager.GetParamServerType() ); SetTimer( WM_UPDATE_INVALID_PROCESS, 100, NULL ); return FALSE; } #ifdef __20080402_ADD_SOLARSCUPDATE_ } #endif } //¿©±â¼­ »ý¼º µé¾î°£´Ù. if( !m_UpdateManager.Init( m_StartManager.GetLauncherStartType(), bApplyScript, byManualAppUpdateNumber, m_StartManager.GetSubParameter() ) ) return FALSE; SetTitle(); m_UpdateManager.StartUpdate(); return TRUE; } BOOL CSunAutoUpdateToolDlg::DeadMyself() { // ÇÁ·Î¼¼½º üũ ·±Ãijª °ÔÀÓ Å¬¶óÀÌ¾ðÆ®°¡ ½ÇÇàÁßÀÎÁö üũÇÑ´Ù UINT uExitCode = 0; //Iterate thru all processes DWORD dwMyID = GetCurrentProcessId(); HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, dwMyID ); if( !TerminateProcess(hProcess, uExitCode) ) { CloseHandle( hProcess ); return FALSE; } CloseHandle( hProcess ); return TRUE; } void CSunAutoUpdateToolDlg::OnTimer(UINT nIDEvent) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. switch( nIDEvent ) { case WM_UPDATE_INVALID_PROCESS : Release(); PostQuitMessage(0); break; case WM_TERMINATE_PROCESS : Release(); PostQuitMessage(0); break; } CDialog::OnTimer(nIDEvent); }