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

📄 dspspider.h

📁 实现了精简的FFT语音压缩 采取了一种新的算法有一定的参考价值
💻 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 + -