// ATS4DemoDlg.h : header file
//
#if !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#define AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h"
//#include "log4nb.h"
class Deliver
{
public:
Deliver(const TCHAR * imageFilename,log4nb * logger);
BOOL openMapfile();
CString getFilename();
BOOL receiveFile(LPCTSTR tempFilename);
BOOL resultWriteBack(LPCTSTR resultXml);
private:
log4nb * De_logger;
protected:
TCHAR mtcImageFilename[250];
HANDLE mhFile;
INT64 lpMapAddress;
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#include "StdAfx.h"
#include "Deliver.h"
//#include "Log.h"
Deliver::Deliver(const TCHAR *imageFilename,log4nb * logger)
{
strcpy_s(mtcImageFilename,sizeof(mtcImageFilename),imageFilename);
De_logger = logger;
}
CString Deliver::getFilename()
{
De_logger->tmWrite("getFilename() begin");
CString temp;
temp = mtcImageFilename;//.Format("%s",mtcImageFilename);
De_logger->tmWrite("getFilename() end");
return temp;
}
BOOL Deliver::openMapfile()
{
De_logger->tmWrite("openMapfile() begin");
if( NULL == mtcImageFilename )
{
TRACE(_T("have no File map object./n"));
De_logger->tmWrite("have no File map object");
De_logger->tmException("openMapfile() Get ImageFilename Failed");
return FALSE;
}
mhFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,//read/write permission.
FALSE,//do not inherit name of object
mtcImageFilename);
if( NULL == mhFile )
{
TRACE(_T("OpenFileMapping failed./n"));
De_logger->tmException("openMapfile() Open file mapping Failed");
return FALSE;
}
lpMapAddress = (INT64)MapViewOfFile(mhFile,FILE_MAP_ALL_ACCESS,0,0,0);
if( NULL == lpMapAddress )
{
TRACE(_T("MapViewOfFile failed./n"));
De_logger->tmException("openMapfile() Get view of filemapping Failed");
return FALSE;
}
De_logger->tmWrite("openMapfile() end");
return TRUE;
}
BOOL Deliver::receiveFile(LPCTSTR tempFilename)
{
De_logger->tmWrite("receiveFile() begin");
if( NULL == lpMapAddress)
{
TRACE(_T("Image file address is null."));
De_logger->tmException("receiveFile() Get MapAddress Failed");
return FALSE;
}
LPVOID lpBuffer = new BYTE[2048];
DWORD nNumberOfBytesToWrite = 0;
//LPDWORD lpNumberOfBytesWritten;
//nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
memcpy(lpBuffer,(LPVOID)lpMapAddress,sizeof(int));//get the header,how long the file should be to read.
nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress);
//memcpy(&nNumberOfBytesToWrite,lpBuffer,sizeof(int));
TRACE(_T("%ld"),nNumberOfBytesToWrite);
memcpy(lpBuffer,(LPVOID)(lpMapAddress + sizeof(int)),nNumberOfBytesToWrite);
HANDLE hFileTemp = CreateFile(tempFilename,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFileTemp == INVALID_HANDLE_VALUE)
{
TRACE(_T("Create temp file failed./n"));
De_logger->tmWrite("Create temp file failed.");
De_logger->tmException("receiveFile() Create temp file Failed");
return FALSE;
}
CFile writeFile(hFileTemp);
writeFile.Write(lpBuffer,nNumberOfBytesToWrite);
CloseHandle(hFileTemp);
delete lpBuffer;
De_logger->tmWrite("receiveFile() end");
return TRUE;
}
BOOL Deliver::resultWriteBack(LPCTSTR resultXml)
{
De_logger->tmWrite("resultWriteBack() begin");
if( _tcslen(resultXml) < 1 )
{
TRACE(_T("Result is empty./n"));
De_logger->tmException("resultWriteBack() Get result xml Failed");
return FALSE;
}
int lenAddr = _tcslen(resultXml);
memcpy( (LPVOID)lpMapAddress,(LPVOID)(&lenAddr),sizeof(int) );
memcpy( (LPVOID)(lpMapAddress + sizeof(int)),(LPVOID)resultXml,lenAddr );
UnmapViewOfFile((LPVOID)lpMapAddress);
if( NULL != mhFile)
CloseHandle(mhFile);
De_logger->tmWrite("resultWriteBack() end");
return TRUE;
}