www.pudn.com > ntshell.rar > sockmgr1.h


// sockmgr1.h: interface for the CSockMgr class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_SOCKMGR1_H__6A27E095_2FC1_4DBB_B954_784DB0F0D50C__INCLUDED_) 
#define AFX_SOCKMGR1_H__6A27E095_2FC1_4DBB_B954_784DB0F0D50C__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#define SOCKMGR_SUCCESS 0 
#define SOCKMGR_PENDING 1 
#define SOCKMGR_SPACE_NOT_ENOUGH 10 
#define SOCKMGR_DATA_NOT_ENOUGH 11 
#define SOCKMGR_SOCK_FAILED 12 
#define SOCKMGR_INVALID_PROCESS 13 
#define SOCKMGR_SOCK_NOT_FOUND 14 
#define SOCKMGR_BUFFER_LOCKED 15 
#define SOCKMGR_SOCK_CLOSED 16 
#define SOCKMGR_NOT_BUFFER 17 
#define SOCKMGR_NOT_ENOUGH_MEMORY 18 
#define SOCKMGR_SOCK_LOCKED 19 
#define SOCKMGR_PACK_CRC_FAILED 20 
 
#define SOCKMGR_IO_READY 20 
#define SOCKMGR_IO_READING_PACKSIZE1 21 
#define SOCKMGR_IO_READING_PACKSIZE2 22 
#define SOCKMGR_IO_READING_PACKSIZE3 23 
#define SOCKMGR_IO_READING_PACKDATA 25 
#define SOCKMGR_IO_READ_FINISH 26 
#define SOCKMGR_IO_WRITING_PACKDATA 27 
#define SOCKMGR_IO_WRITE_FINISH 28 
 
#define BUFFER_LOCKED_NONE 0 
#define BUFFER_LOCKED_RECV 1 
#define BUFFER_LOCKED_SEND 2 
#define BUFFER_LOCKED_USER 3 
 
#define SOCKMGR_SEND_COMPRESS 1 
#define SOCKMGR_SEND_ENCRYPT 2 
 
#define SOCKMGR_SENDING 1 
#define SOCKMGR_RECVING 2 
 
class CSockMgr   
{ 
public: 
	typedef struct _PACK_INFO 
	{ 
		char *pData; 
		int nDataSize; 
		int nPackSize; 
		bool bCompress; 
		bool bEncrypt; 
	} PACK_INFO, *PPACK_INFO; 
 
	typedef int (*IoCallBack)(PPACK_INFO pack, LPVOID param = NULL); 
 
	CSockMgr(); 
	virtual ~CSockMgr(); 
 
	int SendPack(); 
	int RecvPack(); 
	int ReadBuffer(char *buffer, int length); 
	int WriteBuffer(const char *buffer, int length); 
	SOCKET SetSocket(SOCKET sock1); 
	int GetBufferDataSize(); 
	void FlushBuffer(); 
	char *GetErrorString(); 
	static int SendPack(SOCKET sock, const char *buffer, int length = 0, int flags = 0); 
	static int RecvPack(SOCKET sock, IoCallBack funback, LPVOID funparam = NULL); 
	static void InterruptSend(SOCKET sock); 
	static void InterruptRecv(SOCKET sock); 
 
private: 
	typedef struct _SOCK_IO_BUFFER 
	{ 
		char *buffer; 
		int pointer; 
		int datalength; 
		int length; 
		int maxlength; 
	} SOCK_IO_BUFFER, *PSOCK_IO_BUFFER; 
 
	typedef struct _TEMP_BUFFER 
	{ 
		SOCKET sock; 
		char *buffer; 
		int length; 
		int pointer; 
		int method; 
		IoCallBack funback; 
		LPVOID funparam; 
		struct _TEMP_BUFFER *next; 
	} TEMP_BUFFER, *PTEMP_BUFFER; 
 
	typedef struct _PACK_LINK 
	{ 
		PPACK_TYPE_1 pack; 
		int length; 
		int pointer; 
		struct _PACK_LINK *next; 
	} PACK_LINK, *PPACK_LINK; 
 
	int lastErrorCode; 
	SOCKET sock; 
	DWORD flags; 
	IoCallBack sendcb; 
	IoCallBack recvcb; 
	IoCallBack errorcb; 
	SOCK_IO_BUFFER sib; 
	SOCK_IO_BUFFER sob; 
	PPACK_LINK packlink; 
 
	static bool Inited; 
	static PTEMP_BUFFER ptb; 
	static CRITICAL_SECTION SendCS; 
	static CRITICAL_SECTION RecvCS; 
 
	bool AllocBuffer(PSOCK_IO_BUFFER psb, int BufferSize = 0); 
	void FreeBuffer(PSOCK_IO_BUFFER psb); 
}; 
 
#endif // !defined(AFX_SOCKMGR1_H__6A27E095_2FC1_4DBB_B954_784DB0F0D50C__INCLUDED_)