?? 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 + -