⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 patchi.h

📁 ice中间件 文件传输原代码 更新为服务形式
💻 H
字号:
#include "Patch.h"
#include "../include/MyIniFile.h"

using namespace std;
using namespace Ice;
using namespace Patch;

class subvector
{
public:
    void vectortobuf(OUT BYTE *buf,OUT int *buflen,::Patch::ByteSeq ByteSeq)
	{
		int ByteSeqLen = ByteSeq.size();
        
		for(int i=0;i<ByteSeqLen;i++)
		{
			buf[i] = ByteSeq[i];  
		}
		
		*buflen = ByteSeqLen;
	}
	void buftovector(IN BYTE *buf,IN int buflen,::Patch::ByteSeq& ByteSeq)
	{
		for(int i=0;i<buflen;i++)
		{
			ByteSeq.push_back(buf[i]);  
		}
	}
};

class FileHelp
{
public:
	FileHelp()
	{
		hFileSrc = NULL;
		memset(strFileName,0,MAX_PATH);
		memset(strFileVer,0,MAX_PATH);
		memset(pFileMD5,0,16);
	}
	~FileHelp()
	{
		
	}
	bool InitFile()
	{
		if (hFileSrc == NULL)
		{
			GetFileInfo(strFileName,strFileVer,pFileMD5);
			hFileSrc = CreateFile(strFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
			if (INVALID_HANDLE_VALUE ==hFileSrc) 
			{
				return false;
			}
		}
		return true;
    }
	bool ReInitFile()
	{
		GetFileInfo(strFileName,strFileVer,pFileMD5);
		hFileSrc = CreateFile(strFileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
		if (INVALID_HANDLE_VALUE ==hFileSrc) 
		{
			return false;
		}
		return true;
	}
	void DeinitFile()
	{
		if (hFileSrc!=NULL) 
		{
			CloseHandle(hFileSrc);
			hFileSrc = NULL;
		}
		memset(strFileName,0,MAX_PATH);
		memset(strFileVer,0,MAX_PATH);
	}
	BOOL GetFileInfo(CHAR *strPatchPath,CHAR *strFileVer,BYTE *pFileHash)
	{
        IniFile ini;
		CHAR szInst[MAX_PATH] = {0};
		if(!GetSystemDirectoryA(szInst, MAX_PATH))
		{
			return FALSE;
		}
		strcat(szInst, "\\ProductConsole.ini");
		if(!ini.open(szInst))
		{
			return FALSE;
		}
		string s = ini.GetProfileValue("[CtrlCenter]","Directory");
		DWORD len = s.length();
		if((0 == len) || (MAX_PATH < len))
		{
			return FALSE;
		}
		
		memcpy(szInst, s.c_str(), len);
		szInst[len] = 0;
		if('\\' != szInst[len - 1])
		{
			szInst[len++] = '\\';
			szInst[len] = 0;
		}
		strcat(szInst,"\\Config.ini");
		strcpy(strPatchPath,szInst);
		if(!ini.open(strPatchPath))
		{
			return FALSE;
		}
		s = ini.GetProfileValue("[Patch]","PatchPath");
		len = s.length();
		if((0 == len) || (MAX_PATH < len))
		{
			return FALSE;
		}
		memset(strPatchPath,0,strlen(strPatchPath));
		memcpy(strPatchPath, s.c_str(), len);
		strPatchPath[len] = 0;
		if('\\' != strPatchPath[len - 1])
		{
			strPatchPath[len++] = '\\';
			strPatchPath[len] = 0;
		}
		
		s = ini.GetProfileValue("[Patch]","PatchVer");
        len = s.length(); 
		/*  这里没做检查,因为有可能这里没有值
        		if((0 == len) || (MAX_PATH < len))
        		{
        			return FALSE;
        		}*/
        memset(strFileVer,0,strlen(strFileVer));
		memcpy(strFileVer,s.c_str(),len);
		strFileVer[len] = 0;
		s = ini.GetProfileValue("[Patch]","PatchName");
		len = s.length();
		/* 这里没做检查,因为有可能这里没有值
				if((0 == len) || (MAX_PATH < len))
				{
					return FALSE;
				}*/
		CHAR strPatchName[MAX_PATH]={0};
	
		memcpy(strPatchName, s.c_str(), len);
		strPatchName[len] = 0;
		strcat(strPatchPath,strPatchName);
		len = strlen(strPatchPath);
		for(int i=0;i<len;i++)
		{
			if (strPatchPath[i]=='\\') 
			{
				strPatchPath[i]='/';
			}
		}
		s = ini.GetProfileValue("[Patch]","MD5Hash");
		len = s.length();
		if (len!=0) 
		{
		  memcpy(pFileHash,s.c_str(),len);
		}
		return TRUE;
	}
	bool IsDigits(CHAR *pNumChar)
	{
		CHAR c;
		for (DWORD i=0; i<strlen(pNumChar); i++)
		{
			c = pNumChar[i];
			if (c >= ('0') && c <= ('9'))
			{
				continue;
			}
			else
			{
				return false;
			}
		}
		return true;
	}
	int CompareVersion(string strFileVer1,string strFileVer2)
	{
		int  wVer1[4], wVer2[4];
		int	 i;
		CHAR *fileVer1 = const_cast<CHAR *>(strFileVer1.c_str());
		CHAR *fileVer2 = const_cast<CHAR *>(strFileVer2.c_str());
		for (i=0; i<4; i++)
		{
			wVer1[i] = 0;
			wVer2[i] = 0;
		}
		// Get version 1 to DWORDs
		CHAR *pToken = strtok(fileVer1,("."));
		if (pToken == NULL)
		{
			return -21;
		}
		
		i=3;
		while(pToken != NULL)
		{
			if (i<0 || !IsDigits(pToken)) 
			{			
				return -21;	// Error in structure, too many parameters
			}		
			wVer1[i] = atoi(pToken);
			pToken = strtok(NULL,("."));
			i--;
		}
				
		// Get version 2 to DWORDs
		pToken = strtok(fileVer2,("."));
		if (pToken == NULL)
		{
			return -22;
		}
		
		i=3;
		while(pToken != NULL)
		{
			if (i<0 || !IsDigits(pToken)) 
			{
				return -22;	// Error in structure, too many parameters
			}		
			wVer2[i] = atoi(pToken);
			pToken = strtok(NULL,("."));
			i--;
		}
		// Compare the versions
		for (i=3; i>=0; i--)
		{
			if (wVer1[i] > wVer2[i])
			{
				return 1;		// ver1 > ver 2
			}
			else if (wVer1[i] < wVer2[i])
			{
				return -1;   // ver1 < ver2
			}
		}
		
		return 0;	// ver 1 == ver 2
	}
public:
	HANDLE hFileSrc;
	CHAR strFileName[MAX_PATH];
	CHAR strFileVer[MAX_PATH];
	BYTE pFileMD5[128];
};

class UpdateServerI:virtual public UpdateServer
{
public:
	UpdateServerI();
	virtual bool Init(const ::Ice::Current& = ::Ice::Current());
	virtual bool isUpdate(const ::std::string&, const ::Ice::Current& = ::Ice::Current()) const;
	virtual void GetFileInfo(::std::string&, ::Ice::Long&, ::std::string&, ::Patch::ByteSeq&, const ::Ice::Current& = ::Ice::Current());
	virtual void GetDataFromFile_async(const ::Patch::AMD_UpdateServer_GetDataFromFilePtr&, ::Ice::Int, const ::Ice::Current& = ::Ice::Current());
	virtual bool shutdown(const ::Ice::Current& = ::Ice::Current());
    ~UpdateServerI();
	FileHelp *myFileHelp;
	IceUtil::Mutex _updateMutex;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -