Files
2022-10-26 12:25:11 +08:00

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;
}