175 lines
3.7 KiB
C++
175 lines
3.7 KiB
C++
#include ".\update.h"
|
|
#include <process.h>
|
|
#include <io.h>
|
|
#include "MyFolder.h"
|
|
|
|
CUpdate::CUpdate(void)
|
|
{
|
|
m_bConnectFTP = FALSE;
|
|
m_byUpdateNumber = 0;
|
|
m_fnMsgCallBack = NULL;
|
|
}
|
|
|
|
CUpdate::~CUpdate(void)
|
|
{
|
|
m_mapProcessInfo.clear();
|
|
}
|
|
|
|
VOID CUpdate::Release()
|
|
{
|
|
DisconnectFTP();
|
|
}
|
|
|
|
void CUpdate::DisconnectFTP()
|
|
{
|
|
if( m_UpdateModule.IsConnectFTP() == TRUE )
|
|
{
|
|
if( GetUpdateType() == UPDATE_TYPE_LAUNCHER )
|
|
strcpy( m_szTempMessage, "LauncherFTP" );
|
|
else if( GetUpdateType() == UPDATE_TYPE_APPLICATION )
|
|
strcpy( m_szTempMessage, "ApplicationFTP" );
|
|
|
|
m_UpdateModule.DisconnectFTP();
|
|
AddMessage( WM_FTP_DISCONNECT, (VOID*)m_szTempMessage );
|
|
}
|
|
}
|
|
|
|
void CUpdate::GetModuleDirectory( TCHAR* pszDir, int nSize )
|
|
{
|
|
m_UpdateModule.GetModuleDirectory( pszDir, nSize );
|
|
}
|
|
|
|
void CUpdate::StopUpdate()
|
|
{
|
|
m_UpdateModule.StopUpdate();
|
|
}
|
|
|
|
BOOL CUpdate::IsConnectFTP()
|
|
{
|
|
return m_bConnectFTP;
|
|
}
|
|
|
|
BOOL CUpdate::Init()
|
|
{
|
|
ZeroMemory( m_szBasicExecutePath, MAX_PATH );
|
|
ZeroMemory( m_szExecuteParameter, MAX_PATH );
|
|
|
|
// 업데이트 모듈을 초기화 한다.
|
|
if( !m_UpdateModule.Init() )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CUpdate::ConnectFTP( TCHAR* pszIP, int nPort, TCHAR* pszID, TCHAR* pszPass )
|
|
{
|
|
m_bConnectFTP = m_UpdateModule.ConnectFTP( pszIP, nPort, pszID, pszPass );
|
|
|
|
std::string strType;
|
|
if( GetUpdateType() == UPDATE_TYPE_LAUNCHER )
|
|
strcpy( m_szTempMessage, "LauncherFTP" );
|
|
else if( GetUpdateType() == UPDATE_TYPE_APPLICATION )
|
|
strcpy( m_szTempMessage, "ApplicationFTP" );
|
|
|
|
if( m_bConnectFTP ) AddMessage( WM_FTP_CONNECT_SUCCESS, (VOID*)m_szTempMessage );
|
|
else AddMessage( WM_FTP_CONNECT_FAIL, (VOID*)m_szTempMessage );
|
|
|
|
return m_bConnectFTP;
|
|
|
|
}
|
|
|
|
void CUpdate::AddMessage( UINT uMsg, VOID* pData )
|
|
{
|
|
if( !m_fnMsgCallBack ) return;
|
|
|
|
m_fnMsgCallBack( uMsg, (VOID*)pData );
|
|
}
|
|
|
|
|
|
VOID CUpdate::InsertProcessInfo( PROCESS_INFO* pInfo )
|
|
{
|
|
if( !pInfo ) return;
|
|
m_mapProcessInfo.insert( std::make_pair( pInfo->m_byUpdateNumber, pInfo ) );
|
|
}
|
|
|
|
// FALSE를 리턴하면, 프로세서가 살아 있거나, 뭔가 다른 문제가 있는 경우이다.
|
|
// TRUE를 리턴하면, 패치를 해도 좋은 상황이다.
|
|
BOOL CUpdate::CheckLiveProcess( TCHAR* pszCheckProcess)
|
|
{
|
|
if( !pszCheckProcess ) return FALSE;
|
|
if( m_UpdateModule.CheckLiveProcess( pszCheckProcess ) ) return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
PROCESS_INFO* CUpdate::GetProcessInfo( BYTE byUpdateNumber )
|
|
{
|
|
PROCESS_INFO_MAP_ITER iter = m_mapProcessInfo.find( byUpdateNumber );
|
|
if( iter != m_mapProcessInfo.end() )
|
|
return iter->second;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void CUpdate::SetLocalBasicDownDir( TCHAR* pszDir )
|
|
{
|
|
m_UpdateModule.SetLocalBasicDownDir( pszDir );
|
|
}
|
|
|
|
VOID CUpdate::GetLocalBasicDownDir( OUT TCHAR* pszDir, int nBufSize )
|
|
{
|
|
m_UpdateModule.GetLocalBasicDownDir( pszDir, nBufSize );
|
|
}
|
|
|
|
VOID CUpdate::SetLocalBasicExecuteDir( TCHAR* pszDir )
|
|
{
|
|
if( !pszDir ) return;
|
|
strncpy( m_szBasicExecutePath, pszDir, MAX_PATH );
|
|
}
|
|
|
|
VOID CUpdate::GetLocalBasicExecuteDir( OUT TCHAR* pszDir, int nBufSize )
|
|
{
|
|
strncpy( pszDir, m_szBasicExecutePath, nBufSize );
|
|
}
|
|
|
|
VOID CUpdate::SetExecuteParameter( TCHAR* pszParam )
|
|
{
|
|
if( !pszParam ) return;
|
|
strncpy( m_szExecuteParameter, pszParam, MAX_PATH );
|
|
}
|
|
|
|
VOID CUpdate::GetExecuteParameter( OUT TCHAR* pszParam, int nBufSize )
|
|
{
|
|
strncpy( pszParam, m_szExecuteParameter, nBufSize );
|
|
}
|
|
|
|
VOID CUpdate::SetMsgCallBack( fnMsgCallBack CallBack )
|
|
{
|
|
if( !CallBack ) return;
|
|
|
|
m_fnMsgCallBack = CallBack;
|
|
m_UpdateModule.SetMsgCallBack( m_fnMsgCallBack );
|
|
}
|
|
|
|
BOOL CUpdate::DeleteFolder( TCHAR* pszFolder )
|
|
{
|
|
if( _access( pszFolder, 0 ) != -1 ) //파일이나 폴더가 존재하면..
|
|
{
|
|
BOOL bDelete = FALSE;
|
|
BYTE byCnt = 0;
|
|
|
|
while( !bDelete || byCnt > 10 )
|
|
{
|
|
if( MyFolder::DeleteFoler( pszFolder ) )
|
|
bDelete = TRUE;
|
|
|
|
byCnt++;
|
|
}
|
|
|
|
if( byCnt > 10 )
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|