?? dsp_sdk_.txt
字號:
類型:protected虛函數(shù),派生類對象必需重載該函數(shù)
定義:virtual bool UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
參數(shù):byClassLevels -- 類的深度
byAttrNo -- 當(dāng)前操作的屬性的序號
dsp -- 進(jìn)行序列化操作的_DSPPACKET結(jié)構(gòu)
返回:true --表示當(dāng)前對象的屬性已經(jīng)全部還原完,該屬性是對象的最后一個(gè)屬性
false --表示當(dāng)前對象的屬性還沒有全部還原完
描述:與Serialize()方法中的屬性相對應(yīng),定義了對象中的哪些屬性進(jìn)行反序列化操作,這個(gè)方法在對象反序列化時(shí)會(huì)自動(dòng)調(diào)用
舉例:
bool DSPACT::UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
{
//反序列化對象
if(byClassLevels>1)
return BaseObject::UnSerialize(byClassLevels-1,byAttrNo,dsp,dwLen);
else
{
switch(byAttrNo)
{
//屬性的序號必需與Serialize()中的序號相對應(yīng)
case 1: //得到第1個(gè)屬性
if(dsp.Read(,dwLen))
{
//如果反序列化屬性的函數(shù)返回真,則表示該屬性的值已填充完成
}
return false;
case 2: //得到第2個(gè)屬性
dsp.Read();
return false;
case 3: //得到最后一個(gè)屬性
dsp.Read(,dwLen);
}
}
return true;
}
類型:protected虛函數(shù),派生類對象必需重載該函數(shù)
定義:virtual bool Compress(char** const lpBuff,DWORD* pdwLen)
參數(shù):lpBuff -- 在調(diào)用時(shí),指向要壓縮的數(shù)據(jù)緩沖區(qū)的指針,壓縮后指向壓縮數(shù)據(jù)的緩沖區(qū)的首址
pdwLen -- 在調(diào)用時(shí),為要壓縮的數(shù)據(jù)的字節(jié)個(gè)數(shù),壓縮后為壓縮后的數(shù)據(jù)的字節(jié)數(shù)
返回:true --壓縮程序有效;
false --壓縮程序無效;
當(dāng)壓縮有效時(shí),必需修改lpBuff為保存壓縮后數(shù)據(jù)的緩沖區(qū)的指針,pdwLen地址內(nèi)保存為壓縮后的數(shù)據(jù)的長度
類型:protected虛函數(shù),派生類對象必需重載該函數(shù)
定義:virtual bool UnCompress(char** const lpBuff,DWORD dwLen,char* lpUnBuff,WORD& wUnLen,bool bStart)
參數(shù):lpBuff -- bStart==false時(shí),需要將接收被壓縮的數(shù)據(jù)緩沖區(qū)的首址保存在該地址中;
bStart==true時(shí),保存被壓縮的數(shù)據(jù)緩沖區(qū)的首址
dwLen -- 被壓縮數(shù)據(jù)的緩沖區(qū)的長度
lpUnBuff -- bStart==true時(shí),接收解壓縮數(shù)據(jù)的緩沖區(qū)的首址
dwUnLen -- bStart==true時(shí),接收解壓縮數(shù)據(jù)的緩沖區(qū)的長度,在解壓縮完成后,保存為解壓縮數(shù)據(jù)的長度
bStart -- true,表示可以開始進(jìn)行解壓縮數(shù)據(jù);
false,表示該次調(diào)用只是指定填充數(shù)據(jù)的緩沖區(qū),緩沖區(qū)的長度不能小于dwLen;
返回:true --解壓縮程序有效;
false --解壓縮程序無效
如果設(shè)定緩沖區(qū)為NULL,則表示解壓縮程序失敗。
DSP應(yīng)用實(shí)例(一)--輕松實(shí)現(xiàn)BT多點(diǎn)下載
BitTorrent----簡稱"BT"下載,是現(xiàn)在最流行的下載方式,它的主要特點(diǎn)就是多IP下載,一個(gè)文件可以從多個(gè)IP被同時(shí)下載,使下載速度達(dá)到極限。
在這個(gè)數(shù)據(jù)包里提供了一個(gè)標(biāo)準(zhǔn)的DSPSpider類,使用該類可以輕松實(shí)現(xiàn)BitTorrent多點(diǎn)下載。在采用BitTorrent和FlashGet下載時(shí),需要預(yù)先對磁盤進(jìn)行掃描生成整個(gè)文件的索引后,才會(huì)正式開始下載文件,當(dāng)文件很大時(shí),文件的創(chuàng)建時(shí)間會(huì)較長,使系統(tǒng)像死機(jī)了一樣,實(shí)際是在創(chuàng)建文件。DSPSpider采用了更先進(jìn)的方式,在下載文件前無需對磁盤進(jìn)行掃描,文件采用動(dòng)態(tài)創(chuàng)建,隨著下載的完成度而逐步增加,并且下載過程中不需要額外創(chuàng)建任何附加的文件。這次發(fā)布的為debug版,正式版中將包含有更多、更完善的功能。
只需在窗體中響應(yīng)以下6個(gè)消息,就可以輕松實(shí)現(xiàn)BT多點(diǎn)下載。
1 MSG_RECVSECT 接收方消息
接收到了一部分?jǐn)?shù)據(jù),每接收到一部分?jǐn)?shù)據(jù)時(shí),就會(huì)向指定窗體發(fā)送該消息。
必需調(diào)用DSPSpider.OnUpdateSect(wParam,lParam),該函數(shù)將返回當(dāng)前已經(jīng)下載的字節(jié)個(gè)數(shù)。
wParam -- 指向DSPSpider::_FILEDETAIL結(jié)構(gòu)的指針
lParam -- 當(dāng)前接收到的字節(jié)數(shù)
2 MSG_SENDCOMPLETE 接收方消息
接收過程中止,原因可能是文件已全部下載或下載被中止。
必需調(diào)用DSPSpider.OnSendComplete(wParam,lParam),該函數(shù)將返回一個(gè)數(shù)字,如果返回1,則表示文件已經(jīng)全部下載完成;如果返回2,則表示文件還沒有下載完,但是所有線程已經(jīng)終止,原因可能是傳送方終止或接收方終止或下載過程中出現(xiàn)了錯(cuò)誤。關(guān)于線程中止的具體原因,可以通過調(diào)用DSPSpider::GetCompleteInfo(lParam,str)函數(shù)得到錯(cuò)誤的具體原因。
wParam -- 指向DSPSpider::_FILEDETAIL結(jié)構(gòu)的指針
lParam -- 錯(cuò)誤的原因
3 MSG_SETFILENAMESIZE 接收方消息
傳送當(dāng)前接收的文件的大小,文件名,可以在這里設(shè)定顯示,該消息只在開始時(shí)發(fā)送一次
wParam -- 指向DSPSpider::_FILEDETAIL結(jié)構(gòu)的指針
DSPSpider.GetProgressStep()得到步長
DSPSpider.GetCurrSize()得到文件的當(dāng)前的長度
4 MSG_SHOWPROMPT 接收方消息
顯示提示信息,在文件的接收過程中,會(huì)不斷地發(fā)送該消息,傳遞當(dāng)前接收過程的狀態(tài)
wParam -- 低16位,消息的ID。高16位的低8位,當(dāng)前的下載線程個(gè)數(shù);高16位的高8位,當(dāng)前的下載線程中休眠線程的個(gè)數(shù)。
lParam -- 如果不為0,則表示連接方的IP地址的字符串表示
5 MSG_ASSIGNNEWSECT 接收方消息 這是一個(gè)必需響應(yīng)的消息
在該消息中直接調(diào)用DSPSpider.OnAssignNewSect(wParam,lParam)函數(shù)。
6 MSG_CREATERECVTHREAD 接收方消息 這是一個(gè)必需響應(yīng)的消息
在該消息中直接調(diào)用DSPSpider.OnCreateRecvThread(wParam,lParam)函數(shù)。
7 MSG_GETFILENAME 傳送方消息 這是一個(gè)必需響應(yīng)的消息
當(dāng)接收到一個(gè)傳送請求時(shí),根據(jù)接收方傳遞的文件名,決定需要傳送的文件名。
wParam -- 指向DSPSpider::_FILEDETAIL結(jié)構(gòu)的指針
在響應(yīng)該消息時(shí),調(diào)用DSPSpider::SetFilename(wParam,strPathname),該函數(shù)將設(shè)置傳送文件的名字,包含路徑名。
DSPSpider中的結(jié)構(gòu)說明
_SENDTHREADPARAM結(jié)構(gòu),建立監(jiān)聽線程時(shí)所需要傳遞的結(jié)構(gòu)。
pCWnd -- 接收消息的窗體,如果是傳遞給監(jiān)聽線程的參數(shù),則該窗體必需響應(yīng)MSG_GETFILENAME消息。
bInternet -- 是否是Internet應(yīng)用,true表示Internet應(yīng)用;false表示局域網(wǎng)應(yīng)用
_FILEDETAIL結(jié)構(gòu),在響應(yīng)DSPSpider的消息中會(huì)傳遞的結(jié)構(gòu)
strPathname -- 包含路徑的文件名,這個(gè)變量是只讀的,不能改變
strFilename -- 不包含路徑的文件名,這個(gè)變量是只讀的,不能改變
dwFilesize -- 當(dāng)前文件的字節(jié)個(gè)數(shù)
nFileID -- 文件的ID,用來標(biāo)識唯一的文件,只作為參考值,如不想設(shè)定ID,可設(shè)置為0
bRun -- 是否繼續(xù)接收或傳送,該值為true時(shí),表示繼續(xù);為false時(shí),表示中止當(dāng)前過程
hwnd -- 接收消息的窗體的句柄
DSPSpider中的屬性和函數(shù)說明
類型:屬性
定義:DWORD m_dwErrorCode
描述:錯(cuò)誤代碼,在出現(xiàn)錯(cuò)誤時(shí),該變量保存了錯(cuò)誤代碼,說明錯(cuò)誤的原因
類型:屬性
定義:bool m_bExistQuery
描述:文件存在時(shí)是否詢問重寫,如果值為false,則表示文件名存在時(shí),不再下載該文件,而是結(jié)束。
類型:屬性
定義:bool m_bCrc
描述:是否要進(jìn)行校驗(yàn)。為true時(shí),表示要進(jìn)行CRC校驗(yàn);false時(shí),則不進(jìn)行CRC校驗(yàn)
類型:屬性
定義:bool m_bInternet
描述:是否是Internet應(yīng)用。為true時(shí),表示數(shù)據(jù)要轉(zhuǎn)換為網(wǎng)絡(luò)序處理;為false時(shí),表示數(shù)據(jù)為字節(jié)序處理
類型:靜態(tài)方法
定義:static void SetFilename(WPARAM wParam,CString& strPathname)
描述:在響應(yīng)MSG_GETFILENAME消息時(shí),調(diào)用該方法,設(shè)置要傳送的文件的包含路徑的文件名。
類型:靜態(tài)方法
定義:static bool GetCompleteInfo(int which,CString& str)
描述:在響應(yīng)MSG_SENDCOMPLETE消息中,可以調(diào)用該方法,得到過程中止的原因的文字描述。
參數(shù):which -- MSG_SENDCOMPLETE消息中的lParam參數(shù)
str -- 保存文字描述的字符串
返回:true -- 文件已經(jīng)全部下載完成
false -- 文件還未下載完成,下載過程被中止
類型:靜態(tài)方法
定義:static UINT ListenThread(LPVOID lpData)
描述:監(jiān)聽線程
參數(shù):lpData -- 指向DSPSpider::_SENDTHREADPARAM結(jié)構(gòu)的指針
結(jié)構(gòu)中的pCWnd參數(shù),保存了響應(yīng)MSG_GETFILENAME消息的窗體的指針
結(jié)構(gòu)中的bInternet參數(shù),表示監(jiān)聽端口號是網(wǎng)絡(luò)序還是字節(jié)序
結(jié)構(gòu)中的pFunc參數(shù),表示處理監(jiān)聽響應(yīng)的函數(shù)的指針
類型:消息處理函數(shù)
定義:LRESULT OnSendComplete(WPARAM wParam, LPARAM lParam)
描述:在響應(yīng)MSG_SENDCOMPLETE的消息中,必需調(diào)用該方法。
類型:消息處理函數(shù)
定義:LRESULT OnUpdateSect(WPARAM wParam, LPARAM lParam)
描述:在響應(yīng)MSG_RECVSECT的消息中,必需調(diào)用該方法。
類型:消息處理函數(shù)
定義:LRESULT OnAssignNewSect(WPARAM wParam, LPARAM lParam)
描述:在響應(yīng)MSG_ASSIGNNEWSECT的消息中,必需調(diào)用該方法。
類型:消息處理函數(shù)
定義:LRESULT OnAbort(WPARAM wParam, LPARAM lParam)
描述:當(dāng)接收方想在接收過程中中止整個(gè)接收過程時(shí),調(diào)用該方法。
參數(shù):wParam -- 值為0
lParam -- 值為0
返回:0 -- 表示接收過程正準(zhǔn)備中止,但接收線程還未全部中止
1 -- 表示接收過程已經(jīng)全部中止
類型:消息處理函數(shù)
定義:LRESULT OnCreateRecvThread(WPARAM wParam, LPARAM lParam)
描述:在響應(yīng)MSG_CREATERECVTHREAD的消息中,必需調(diào)用該方法
類型:方法
定義:void SafeRelease()
描述:安全釋放資源,該方法在DSPSpider對象注銷前應(yīng)保證被調(diào)用一次
類型:方法
定義:BOOL AddIP(const char *lpSrvIP,WORD wPort,WORD nPriority=0)
描述:增加一個(gè)可以用來下載的IP
參數(shù):lpSrvIP -- 可以下載文件的IP或域名
wPort -- IP的監(jiān)聽端口號
nPriority -- 加權(quán)值,加權(quán)值越小,將優(yōu)先下載。
返回:true -- 正確添加。IP可以被重復(fù)增加,重復(fù)增加同一個(gè)IP,表示同時(shí)從該IP創(chuàng)建多個(gè)線程下載
false -- 該IP錯(cuò)誤,無法得到正確的IP地址
特點(diǎn):所有的IP按優(yōu)先權(quán)排序,采用二分法插入。一個(gè)IP只能創(chuàng)建一個(gè)線程。
類型:方法
定義:void RemoveIP(const char *lpSrvIP)
描述:取消一個(gè)用來下載的IP
參數(shù):lpSrvIP -- 可以下載文件的IP或域名
類型:方法
定義:BOOL RunSpider(const char* lpFilename,const char* lpPathname,HWND hWnd,BYTE byThreadCount,int nFileID=0);
描述:準(zhǔn)備采用多線程接收一個(gè)文件
參數(shù):lpFilename -- 要下載的文件名,不包含路徑名
lpPathname -- 要下載的文件名,包含路徑名
hWnd -- 響應(yīng)接收方消息的窗體的句柄
byThreadCount -- 需要同時(shí)下載的線程的個(gè)數(shù)
nFileID -- 文件的ID
類型:方法
定義:DWORD GetProgressStep()
描述:得到步進(jìn)的步長
類型:方法
定義:DWORD GetCurrSize()
描述:得到當(dāng)前已經(jīng)下載的長度
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -