⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsp_sdk_.txt

📁 DSP应用实例(一)--轻松实现BT多点下载 源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
    
    
    类型:protected虚函数,派生类对象必需重载该函数
    定义:virtual bool UnSerialize(BYTE byClassLevels,BYTE byAttrNo,DSP::_DSPPACKET &dsp,DWORD dwLen)
    参数:byClassLevels --  类的深度
         byAttrNo      --  当前操作的属性的序号
         dsp           --  进行序列化操作的_DSPPACKET结构
    返回:true  --表示当前对象的属性已经全部还原完,该属性是对象的最后一个属性
         false --表示当前对象的属性还没有全部还原完
    描述:与Serialize()方法中的属性相对应,定义了对象中的哪些属性进行反序列化操作,这个方法在对象反序列化时会自动调用
    举例:
        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()中的序号相对应
                    case 1:                     //得到第1个属性
                        if(dsp.Read(,dwLen))
                        {
                            //如果反序列化属性的函数返回真,则表示该属性的值已填充完成
                        }
                        return false;
                    case 2:                     //得到第2个属性
                        dsp.Read();
                        return false;
                    case 3:                     //得到最后一个属性
                        dsp.Read(,dwLen);
                }
            }
            return true;
        }
        
    
    类型:protected虚函数,派生类对象必需重载该函数
    定义:virtual bool Compress(char** const lpBuff,DWORD* pdwLen)
    参数:lpBuff    --  在调用时,指向要压缩的数据缓冲区的指针,压缩后指向压缩数据的缓冲区的首址
         pdwLen    --  在调用时,为要压缩的数据的字节个数,压缩后为压缩后的数据的字节数
    返回:true  --压缩程序有效;
         false --压缩程序无效;
         当压缩有效时,必需修改lpBuff为保存压缩后数据的缓冲区的指针,pdwLen地址内保存为压缩后的数据的长度


    类型:protected虚函数,派生类对象必需重载该函数
    定义:virtual bool UnCompress(char** const lpBuff,DWORD dwLen,char* lpUnBuff,WORD& wUnLen,bool bStart)
    参数:lpBuff	--	bStart==false时,需要将接收被压缩的数据缓冲区的首址保存在该地址中;
				        bStart==true时,保存被压缩的数据缓冲区的首址
	      dwLen	    --	被压缩数据的缓冲区的长度
	      lpUnBuff  --	bStart==true时,接收解压缩数据的缓冲区的首址
	      dwUnLen	--	bStart==true时,接收解压缩数据的缓冲区的长度,在解压缩完成后,保存为解压缩数据的长度
	      bStart	--	true,表示可以开始进行解压缩数据;
				        false,表示该次调用只是指定填充数据的缓冲区,缓冲区的长度不能小于dwLen;
    返回:true  --解压缩程序有效;
         false --解压缩程序无效
		  如果设定缓冲区为NULL,则表示解压缩程序失败。




                      DSP应用实例(一)--轻松实现BT多点下载
                      
    BitTorrent----简称"BT"下载,是现在最流行的下载方式,它的主要特点就是多IP下载,一个文件可以从多个IP被同时下载,使下载速度达到极限。
    在这个数据包里提供了一个标准的DSPSpider类,使用该类可以轻松实现BitTorrent多点下载。在采用BitTorrent和FlashGet下载时,需要预先对磁盘进行扫描生成整个文件的索引后,才会正式开始下载文件,当文件很大时,文件的创建时间会较长,使系统像死机了一样,实际是在创建文件。DSPSpider采用了更先进的方式,在下载文件前无需对磁盘进行扫描,文件采用动态创建,随着下载的完成度而逐步增加,并且下载过程中不需要额外创建任何附加的文件。这次发布的为debug版,正式版中将包含有更多、更完善的功能。
     
    只需在窗体中响应以下6个消息,就可以轻松实现BT多点下载。
    1   MSG_RECVSECT            接收方消息
        接收到了一部分数据,每接收到一部分数据时,就会向指定窗体发送该消息。
        必需调用DSPSpider.OnUpdateSect(wParam,lParam),该函数将返回当前已经下载的字节个数。
        wParam  --  指向DSPSpider::_FILEDETAIL结构的指针
        lParam  --  当前接收到的字节数
        
    2   MSG_SENDCOMPLETE        接收方消息
        接收过程中止,原因可能是文件已全部下载或下载被中止。
        必需调用DSPSpider.OnSendComplete(wParam,lParam),该函数将返回一个数字,如果返回1,则表示文件已经全部下载完成;如果返回2,则表示文件还没有下载完,但是所有线程已经终止,原因可能是传送方终止或接收方终止或下载过程中出现了错误。关于线程中止的具体原因,可以通过调用DSPSpider::GetCompleteInfo(lParam,str)函数得到错误的具体原因。
        wParam  --  指向DSPSpider::_FILEDETAIL结构的指针
        lParam  --  错误的原因
        
    3   MSG_SETFILENAMESIZE     接收方消息
        传送当前接收的文件的大小,文件名,可以在这里设定显示,该消息只在开始时发送一次
        wParam  --  指向DSPSpider::_FILEDETAIL结构的指针
        DSPSpider.GetProgressStep()得到步长
        DSPSpider.GetCurrSize()得到文件的当前的长度
        
    4   MSG_SHOWPROMPT          接收方消息
        显示提示信息,在文件的接收过程中,会不断地发送该消息,传递当前接收过程的状态
        wParam  --  低16位,消息的ID。高16位的低8位,当前的下载线程个数;高16位的高8位,当前的下载线程中休眠线程的个数。
        lParam  --  如果不为0,则表示连接方的IP地址的字符串表示
        
    5   MSG_ASSIGNNEWSECT       接收方消息      这是一个必需响应的消息
        在该消息中直接调用DSPSpider.OnAssignNewSect(wParam,lParam)函数。
        
    6   MSG_CREATERECVTHREAD    接收方消息      这是一个必需响应的消息
        在该消息中直接调用DSPSpider.OnCreateRecvThread(wParam,lParam)函数。
        
    7   MSG_GETFILENAME         传送方消息      这是一个必需响应的消息
        当接收到一个传送请求时,根据接收方传递的文件名,决定需要传送的文件名。
        wParam  --  指向DSPSpider::_FILEDETAIL结构的指针
        在响应该消息时,调用DSPSpider::SetFilename(wParam,strPathname),该函数将设置传送文件的名字,包含路径名。    
        
        
                            DSPSpider中的结构说明
                            
    _SENDTHREADPARAM结构,建立监听线程时所需要传递的结构。
        pCWnd       --  接收消息的窗体,如果是传递给监听线程的参数,则该窗体必需响应MSG_GETFILENAME消息。
        bInternet   --  是否是Internet应用,true表示Internet应用;false表示局域网应用


    _FILEDETAIL结构,在响应DSPSpider的消息中会传递的结构
        strPathname --  包含路径的文件名,这个变量是只读的,不能改变
        strFilename --  不包含路径的文件名,这个变量是只读的,不能改变
        dwFilesize  --  当前文件的字节个数
        nFileID     --  文件的ID,用来标识唯一的文件,只作为参考值,如不想设定ID,可设置为0
        bRun        --  是否继续接收或传送,该值为true时,表示继续;为false时,表示中止当前过程
        hwnd        --  接收消息的窗体的句柄
        
        
        
                            DSPSpider中的属性和函数说明
        
    类型:属性
    定义:DWORD m_dwErrorCode
    描述:错误代码,在出现错误时,该变量保存了错误代码,说明错误的原因
    
    类型:属性
    定义:bool m_bExistQuery
    描述:文件存在时是否询问重写,如果值为false,则表示文件名存在时,不再下载该文件,而是结束。
    
    类型:属性
    定义:bool m_bCrc
    描述:是否要进行校验。为true时,表示要进行CRC校验;false时,则不进行CRC校验
    
    类型:属性
    定义:bool m_bInternet
    描述:是否是Internet应用。为true时,表示数据要转换为网络序处理;为false时,表示数据为字节序处理
    
    类型:静态方法
    定义:static void SetFilename(WPARAM wParam,CString& strPathname)
    描述:在响应MSG_GETFILENAME消息时,调用该方法,设置要传送的文件的包含路径的文件名。
    
    类型:静态方法
    定义:static bool GetCompleteInfo(int which,CString& str)
    描述:在响应MSG_SENDCOMPLETE消息中,可以调用该方法,得到过程中止的原因的文字描述。
    参数:which --  MSG_SENDCOMPLETE消息中的lParam参数
          str   --  保存文字描述的字符串
    返回:true  --  文件已经全部下载完成
          false --  文件还未下载完成,下载过程被中止
          
    类型:静态方法
    定义:static UINT ListenThread(LPVOID lpData)
    描述:监听线程
    参数:lpData    --  指向DSPSpider::_SENDTHREADPARAM结构的指针
                结构中的pCWnd参数,保存了响应MSG_GETFILENAME消息的窗体的指针
                结构中的bInternet参数,表示监听端口号是网络序还是字节序
                结构中的pFunc参数,表示处理监听响应的函数的指针
                
    类型:消息处理函数
    定义:LRESULT OnSendComplete(WPARAM wParam, LPARAM lParam)
    描述:在响应MSG_SENDCOMPLETE的消息中,必需调用该方法。
    
    类型:消息处理函数
    定义:LRESULT OnUpdateSect(WPARAM wParam, LPARAM lParam)
    描述:在响应MSG_RECVSECT的消息中,必需调用该方法。
    
    类型:消息处理函数
    定义:LRESULT OnAssignNewSect(WPARAM wParam, LPARAM lParam)
    描述:在响应MSG_ASSIGNNEWSECT的消息中,必需调用该方法。
    
    类型:消息处理函数
    定义:LRESULT OnAbort(WPARAM wParam, LPARAM lParam)
    描述:当接收方想在接收过程中中止整个接收过程时,调用该方法。
    参数:wParam    --  值为0
          lParam    --  值为0
    返回:0         --  表示接收过程正准备中止,但接收线程还未全部中止
          1         --  表示接收过程已经全部中止
          
    类型:消息处理函数
    定义:LRESULT OnCreateRecvThread(WPARAM wParam, LPARAM lParam)
    描述:在响应MSG_CREATERECVTHREAD的消息中,必需调用该方法
    
    类型:方法
    定义:void  SafeRelease()
    描述:安全释放资源,该方法在DSPSpider对象注销前应保证被调用一次
    
    类型:方法
    定义:BOOL  AddIP(const char *lpSrvIP,WORD wPort,WORD nPriority=0)
    描述:增加一个可以用来下载的IP
    参数:lpSrvIP   --  可以下载文件的IP或域名
          wPort     --  IP的监听端口号
          nPriority --  加权值,加权值越小,将优先下载。
    返回:true      --  正确添加。IP可以被重复增加,重复增加同一个IP,表示同时从该IP创建多个线程下载
          false     --  该IP错误,无法得到正确的IP地址
    特点:所有的IP按优先权排序,采用二分法插入。一个IP只能创建一个线程。
    
    类型:方法
    定义:void  RemoveIP(const char *lpSrvIP)
    描述:取消一个用来下载的IP
    参数:lpSrvIP   --  可以下载文件的IP或域名
    
    类型:方法
    定义:BOOL  RunSpider(const char* lpFilename,const char* lpPathname,HWND hWnd,BYTE byThreadCount,int nFileID=0);
    描述:准备采用多线程接收一个文件
    参数:lpFilename    --  要下载的文件名,不包含路径名
          lpPathname    --  要下载的文件名,包含路径名
          hWnd          --  响应接收方消息的窗体的句柄
          byThreadCount --  需要同时下载的线程的个数
          nFileID       --  文件的ID
          
    类型:方法
    定义:DWORD GetProgressStep()
    描述:得到步进的步长
    
    类型:方法
    定义:DWORD GetCurrSize()
    描述:得到当前已经下载的长度


		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -