📄 dspspider.h
字号:
// DSPSpider.h: interface for the DSPSpider class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DSPSPIDER_H__563AE7C8_78D7_45C0_BA2E_2596100F6D64__INCLUDED_)
#define AFX_DSPSPIDER_H__563AE7C8_78D7_45C0_BA2E_2596100F6D64__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <deque>
#include <math.h>
#include <fstream.h>
#define LISTENPORT 34567
class AFX_EXT_CLASS DSPSpider
{
public:
DSPSpider();
virtual ~DSPSpider();
struct AFX_EXT_CLASS _SENDTHREADPARAM
{
SOCKET sock;
HWND hwnd;
CWinThread* pThread;
bool bInternet;
};
struct AFX_EXT_CLASS _FILEDETAIL
{
CString strPathname; //文件包含路径的名字
CString strFilename; //文件不包含路径的名字
DWORD dwFilesize; //文件的大小字节数
int nFileID; //文件的ID,可以是任意值,标识一个唯一的文件
bool bRun; //是否继续接收或传送的布尔变量
HWND hwnd; //接收消息的窗体的句柄
};
enum
{
FILE_SECT_SIZE =0xFFF, //每次传送的段的最大尺寸
//dwErrorCode的错误代码
ERR_FILE_EXIST =5000, //文件已经存在
ERR_FILE_OUTFAILED, //文件无法写
ERR_FILE_INFAILED, //文件无法读
ERR_RECVING, //当前BitSpider正在下载
ERR_WNDNOTCREATE, //窗体没有创建
ERR_MORETHANTHREADNO, //无法创建更多的线程
ERR_HASTHREADSLEEP, //有线程处于休眠状态
//提示信息的种类
PROMPT_RECVSLEEP =10000,
PROMPT_MORETHAN,
PROMPT_NOIP,
PROMPT_CANNOTCONNECT,
PROMPT_RECVABORT,
PROMPT_RECVEND,
//DSPFile类在传送或接收过程中发出的消息
MSG_GETFILENAME =12356,
//wParam -- _FILEDETAIL结构的指针
//返回时,重新设置包含路径的文件名;如果文件名设置为空,则表示没有文件
MSG_SENDSECT,
MSG_RECVSECT,
//wParam -- _FILEDETAIL结构的指针
//lParam -- 当前段的长度
MSG_SENDCOMPLETE,
//wParam -- _FILEDETAIL结构的指针
//lParam -- 完成的原因,调用DSPFile::GetCompleteInfo(lParam,..)传递该参数,可以得到具体原因的字符串表示
// 如果函数返回true,则表示成功,false表示失败。
MSG_SETFILENAMESIZE,
//wParam -- _FILEDETAIL结构的指针
MSG_SHOWPROMPT,
//wParam -- 提示信息的种类
};
BOOL AddIP(const char *lpSrvIP,WORD wPort,WORD nPriority=0);
void RemoveIP(const char *lpSrvIP);
BOOL RunSpider(const char* lpFilename,const char* lpPathname,HWND hWnd,BYTE byThreadCount,int nFileID=0);
DWORD GetProgressStep();
DWORD GetCurrSize();
LRESULT OnSendComplete(WPARAM wParam, LPARAM lParam);
LRESULT OnUpdateSect(WPARAM wParam, LPARAM lParam);
LRESULT OnAssignNewSect(WPARAM wParam, LPARAM lParam);
LRESULT OnAbort(WPARAM wParam, LPARAM lParam);
LRESULT OnCreateRecvThread(WPARAM wParam, LPARAM lParam);
static bool GetCompleteInfo(int which,CString& str);
static UINT SendThread(LPVOID lpData);
static UINT ListenThread(LPVOID lpData);
DWORD m_dwErrorCode; //错误代码
bool m_bExistQuery; //文件存在时询问
bool m_bCrc; //是否要进行校验
bool m_bInternet; //是否是Internet应用
CStatic* m_pstaPrompt;
protected:
HWND m_hMsgWnd;
BYTE m_byRunThreadCount;
BYTE m_bySleepThreadCount;
CString m_strFilename;
CString m_strPathname;
ofstream m_ofs;
ifstream m_ifs;
private:
struct _SECTFILEHEADER;
struct _SRVIP;
struct _MINSECT;
bool m_bWaitIP;
BYTE m_byThreadCount;
std::deque<_SRVIP*> m_dqSrvIP;
_FILEDETAIL* m_phThreadDetail[10];
_SECTFILEHEADER* m_pSectHeader;
inline void ReleaseIP(int nSrvIPNo);
inline int GetSrvIP();
inline void ShowPromptMessage(WORD which,const char* lpIP=NULL);
inline BOOL InitRecvSpider(BYTE byThreadCount,int nFileID);
inline BOOL RunAnRecvThread();
};
#endif // !defined(AFX_DSPSPIDER_H__563AE7C8_78D7_45C0_BA2E_2596100F6D64__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -