?? patchi.cpp
字號:
#include "stdafx.h"
#include <Ice/Ice.h>
#include "PatchI.h"
#include "MD5.h"
UpdateServerI::UpdateServerI()
{
myFileHelp = new FileHelp;
}
UpdateServerI::~UpdateServerI()
{
delete myFileHelp;
}
bool UpdateServerI::Init(const ::Ice::Current& cur)
{
myFileHelp->DeinitFile();
bool bRet = myFileHelp->InitFile();
return bRet;
}
bool UpdateServerI::isUpdate(const ::std::string& curFileVer, const ::Ice::Current&) const
{
if (0==strlen(myFileHelp->strFileVer))
{
if (!myFileHelp->InitFile()) {
return false;
}
}
int iRet = myFileHelp->CompareVersion(curFileVer,myFileHelp->strFileVer);
if (iRet<0)
{
return false;
}
return true;
}
void UpdateServerI::GetFileInfo(::std::string& fileName, ::Ice::Long& fileSize, ::std::string& updateVersion, ::Patch::ByteSeq& pFileHash, const ::Ice::Current&)
{
CHAR strFileName[MAX_PATH] = {0};
myFileHelp->GetFileName(myFileHelp->strFileName,myFileHelp->strFileVer);
fileName = myFileHelp->strFileName;
if (NULL == myFileHelp->hFileSrc)
{
if (!myFileHelp->InitFile())
{
return;
}
}
fileSize = GetFileSize(myFileHelp->hFileSrc,NULL);
}
void UpdateServerI::GetDataFromFile_async(const ::Patch::AMD_UpdateServer_GetDataFromFilePtr& amdPtr, ::Ice::Int iFilePos,const ::Ice::Current& /* = ::Ice::Current */)
{
BYTE *pNewBuf = NULL;
BYTE *pHashValue = NULL;
::Patch::ByteSeq myByteSeq;
::Patch::ByteSeq myHashValue;
::Ice::Int iReadSize = 0;
subvector subv;
bool bRet = true;
unsigned char md5[16] = {0};
unsigned long dwReadSizeOut, dwTotalReadSize = 0;
if (myFileHelp->hFileSrc==NULL)
{
if (!myFileHelp->InitFile()) {
myException ex;
ex.iErrCode = -1;
ex.errDescription = "打開文件失敗!";
throw ex;
// 這里返回文件打開的錯誤
}
}
pNewBuf = new BYTE[4096];
if (NULL==pNewBuf) {
bRet = 0;
myException ex;
ex.iErrCode = -1;
ex.errDescription = "內存不足,無法分配內存";
throw ex;
}
memset(pNewBuf,0,4096);
SetFilePointer(myFileHelp->hFileSrc,iFilePos*4096,0,FILE_BEGIN);
bRet = ReadFile(myFileHelp->hFileSrc,pNewBuf,4096,&dwReadSizeOut,NULL);
iReadSize = dwReadSizeOut;
if ((true==bRet)&&(iReadSize==4096))
{
MD5(pNewBuf,4096,md5);
subv.buftovector(pNewBuf,dwReadSizeOut,myByteSeq);
subv.buftovector(md5,16,myHashValue);
}
else if ((true==bRet)&&(iReadSize<4096))
{ // 表示文件已經讀取完畢
MD5(pNewBuf,iReadSize,md5);
subv.buftovector(pNewBuf,dwReadSizeOut,myByteSeq);
subv.buftovector(md5,16,myHashValue);
}
{
if (!bRet)
{
CloseHandle(myFileHelp->hFileSrc);
myFileHelp->hFileSrc = NULL;
delete pNewBuf;
pNewBuf = NULL;
amdPtr->ice_response(myByteSeq,myHashValue,0);
myException ex;
ex.iErrCode = -2;
ex.errDescription = "讀取文件失敗";
throw ex;
// 這里返回讀取文件失敗的錯誤
}
}
delete pNewBuf;
pNewBuf = NULL;
amdPtr->ice_response(myByteSeq,myHashValue,iReadSize);
// 這里返回文件成功
return ;
}
bool UpdateServerI::shutdown(const ::Ice::Current& cur)
{
cur.adapter->getCommunicator()->shutdown();
return true;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -