www.pudn.com > DSPSample.rar > DSPFile.h


// DSPFile.h: interface for the DSPFile class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_DSPFILE_H__468FCA83_F074_4E6D_A354_4E40904F9A42__INCLUDED_) 
#define AFX_DSPFILE_H__468FCA83_F074_4E6D_A354_4E40904F9A42__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "DSP.h" 
 
class DSPFile : public DSPACT   
{ 
	SELF_SERIALIZE("PPQFILE","DSPFile",DSPACT); 
 
public: 
	enum 
	{ 
		FILE_SECT_SIZE=0xFFF,			//每次传送的段的最大尺寸 
 
		//DSPFile类在传送或接收过程中发出的消息 
		MSG_SENDSECT	=5001, 
		MSG_RECVSECT, 
			//wParam	--	_FILEDETAIL结构的指针 
			//lParam	--	当前段的长度 
		MSG_SENDCOMPLETE, 
			//wParam	--	_FILEDETAIL结构的指针 
			//lParam	--	完成的原因,调用DSPFile::GetCompleteInfo(lParam,..)传递该参数,可以得到具体原因的字符串表示 
			//				如果函数返回true,则表示成功,false表示失败。 
		MSG_SETFILENAMESIZE, 
			//wParam	--	_FILEDETAIL结构的指针 
	}; 
 
	struct _FILEDETAIL 
	{ 
		CString		strPathname;	//文件包含路径的名字 
		int			nFilesize;		//文件的大小字节数 
		int			nCurrLen;		//文件当前传送和接收的长度 
		int			nFileID;		//文件的ID,可以是任意值,标识一个唯一的文件 
		bool*		lpbRun;			//是否继续接收或传送的布尔变量的地址 
		HWND		hwnd;			//接收消息的窗体的句柄 
		_FILEDETAIL():hwnd(NULL){}; 
	}; 
 
	DSPFile(); 
	virtual ~DSPFile(); 
	bool	ReadySendFile(bool& bRun,SOCKET sock,bool bCrc,DSP::_DSPPACKET& packet,HWND hWnd=NULL); 
	bool	ReadyRecvFile(bool& bRun,SOCKET sock,DSP::_DSPPACKET& packet,HWND hWnd=NULL); 
 
	static bool GetCompleteInfo(int which,CString& str); 
 
	std::string		m_strFilename; 
	int				m_nFilesize; 
	_FILEDETAIL		m_hFileDetail; 
 
protected: 
	virtual bool	AttrSectRecv(BYTE byClassLevels,BYTE byAttrNo,const char* const lpBuff,DWORD dwLen,bool bLast); 
	virtual bool	AttrSectSend(BYTE byClassLevels,BYTE byAttrNo,char** const lpBuff,DWORD& dwLen,bool& bContinue); 
	virtual bool	Serialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp); 
	virtual bool	UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen); 
 
	//不需要序列化的属性 
	ofstream		m_ofs; 
	ifstream		m_ifs; 
 
	//需要被序列化的属性 
	char			m_buff[SECT_MAX_SIZE]; 
}; 
 
 
#endif // !defined(AFX_DSPFILE_H__468FCA83_F074_4E6D_A354_4E40904F9A42__INCLUDED_)