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

108 lines
4.2 KiB
C++

/************************************************************************/
/*
/* CupdateModule Class
/*
/* 정해진 규칙에 따라, FTP를 통해 해당 프로그램 업데이트
/*
/* 만든이 : 조재식(썬 서버팀)
/*
/* 날짜 : 2006.2.1
/*
/* 버전 : 0.0.1
/*
/************************************************************************/
#pragma once
#include "define.h"
#include "FtpNetwork.h"
#include "UpdateFolderInfo.h"
#include "UpdateFileInfo.h"
#include "VersionInfo.h"
#include "MessageDefine.h"
#include <process.h>
#include <string>
#include <iostream>
#include "PublicStruct.h"
using namespace std;
class DLL_DECLARE CUpdateModule
{
public:
CUpdateModule(void);
~CUpdateModule(void);
private:
TCHAR m_szBasicDownDir[MAX_PATH]; //로컬에 다운로드할 기본 경로.
CVersionInfo m_CurVersion; //현재 업데이트 하려는 어플리케이션의 현재 버전.
UPDATE_FILE_INFO m_UpdateInfo;
// 위의 4개의 멤버 변수는 반드시 시작전에 값을 대입해주고 시작해야 한다.
CFtpNetwork m_FtpNetwork;
unsigned int m_unThreadID;
BYTE m_byUpdateFolderCount;
CUpdateFolderInfo m_UpdateFolderInfo[MAX_UPDATE_FOLDER_COUNT];
CUpdateFileInfo m_UpdateFileInfo;
BOOL m_bUpdateStart;
//Setter, Getter
public:
void SetLocalBasicDownDir( TCHAR* pszDir );
void GetLocalBasicDownDir( OUT TCHAR* pszDir, int nSize );
TCHAR* GetLocalBasicDownDir(){ return m_szBasicDownDir; }
void SetUpdateNumber( BYTE byUpdateNumber ){ m_UpdateInfo.m_byUpdateNumber = byUpdateNumber; }
BYTE GetUpdateNumber(){ return m_UpdateInfo.m_byUpdateNumber; }
void SetUpdateSequence( BYTE byUpdateSequence ){ m_UpdateInfo.m_byUpdateSequence = byUpdateSequence; }
BYTE GetUpdateSequence(){ return m_UpdateInfo.m_byUpdateSequence; }
CVersionInfo& GetCurVersion(){ return m_CurVersion; }
void SetCurVerInfo( TCHAR* pszVersion );
void SetProcessName( TCHAR* pszName );
void GetProcessName( OUT TCHAR* pszName, int nSize );
TCHAR* GetProcessName(){ return m_UpdateInfo.m_szProcessName; }
//실행
public:
BOOL Init();
BOOL ConnectFTP( TCHAR* pszIP, int nPort, TCHAR* pszID, TCHAR* pszPass );
VOID DisconnectFTP();
BOOL IsConnectFTP(){ return m_FtpNetwork.IsConnectFTP(); }
VOID StopUpdate();
//CallBack
public:
fnMsgCallBack m_fnMsgCallback;
VOID SetMsgCallBack( fnMsgCallBack CallBack );
BOOL (*m_fnSaveVersion)( eUPDATE_TYPE type, BYTE byUpdateNum, CVersionInfo* pVerInfo );
void AddMessage( UINT uMsg, VOID* pData = NULL );
public:
BOOL GetFtpIP( TCHAR* pszIP, int nSize );
int GetFtpPort();
void GetModuleDirectory( TCHAR* pszDirPath, int nSize );
BOOL CheckLiveProcess( TCHAR* pszProcess, BOOL bKillProcess = FALSE );
eRC_VERSION CheckVersionFiles( CVersionInfo& rVerInfo );
BOOL GetUpdateFolderCount( CVersionInfo CurVersion, OUT BYTE& byUpdateFolderCount );
BOOL UpdateOneProcess();
void CreateLocalProcessDownDir( );
void MakeDirectory( const char* pszDir );
void SendTerminateProcessMsg();
private:
HANDLE MakeLocalFile( const char* pszLocalFilePath ); //로컬파일을 생성한다.
BOOL GetSplitFilePath( const TCHAR* pszFilePath, TCHAR* pszDir, TCHAR* pszFile );
BOOL GetLocalFileName( const TCHAR* pszLocalPath, const TCHAR* pszRemoteFileName, TCHAR* pszLocalFilePath );
BOOL SetRemoteDirectory( const TCHAR* pszRemoteDir );
BOOL CanFileDownload( const TCHAR* pszLocalFilePath, const WIN32_FIND_DATA& remoteFileInfo );
BOOL DownloadFile( const TCHAR* pszRemoteFilePath, TCHAR* pszLocalPath = NULL );
BOOL DownloadFilesOnFileList( TCHAR* pszRemoteDirPath );
void GetAbsolteLocalDownDir( string strRelativeDir, string& strAbsolteDir );
void GetVersionFromString( char* pszVersion, byte* byVer, int nMaxVerCount );
virtual BOOL SaveLocalVerInfo( CVersionInfo info ){ return TRUE; }
void GetRemoteVersionFolderPath( TCHAR* pszFolderPath, int nSize, const TCHAR* pszVerFolder );
void GetLocalVersionFolderPath( char* pszFolderPath, int nSize, const char* pszVerFolder );
void GetRemoteVersionFilePath( TCHAR* pszVerFilePath, int nSize );
void GetLocalFileListPath( char* pszFilePath, int nSize, const char* pszVerFolder );
void GetRemoteFileListPath( char* pszFilePath, int nSize, const char* pszVerFolder );
VOID KillProcess(DWORD th32ProcessID);
};