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


// sockmgr.h: interface for the CSockManager class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_SOCKMGR_H__D063F8D1_0584_40E3_8930_0004059BDFC8__INCLUDED_) 
#define AFX_SOCKMGR_H__D063F8D1_0584_40E3_8930_0004059BDFC8__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 BUFFER_BEGIN 0 
#define BUFFER_CURRENT 1 
#define BUFFER_END 2 
 
#define SOCKMGR_SEND_COMPRESS 1 
#define SOCKMGR_SEND_ENCRYPT 2 
 
class CSockManager 
{ 
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); 
 
	CSockManager(); 
	virtual ~CSockManager(); 
	int SendPack(SOCKET sock); 
	int RecvPack(SOCKET sock); 
	int ReadBuffer(SOCKET sock, char *buffer, int length); 
	int WriteBuffer(SOCKET sock, char *buffer, int length); 
	int GetBufferDataSize(SOCKET sock); 
	int InsertSock(SOCKET sock); 
	void DeleteSock(SOCKET sock); 
	int GetIoStateCode(SOCKET sock); 
	int OpenListenSock(char *bind_ip, int bind_port); 
	int GetBufferHandle(SOCKET sock, void **buffer, int *length); 
	void ReleaseBufferHandle(SOCKET sock); 
	int MovePointer(SOCKET sock, int move, int method = BUFFER_BEGIN); 
	void CleanupBuffer(SOCKET sock); 
	char *GetErrorString(); 
	static int SendPack(SOCKET sock, 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 _SOCK_IO_MANAGER 
	{ 
		SOCKET sock; 
		SOCK_IO_BUFFER sib; 
		int siblock; 
		int status; 
		int packsize; 
		IoCallBack sendcb; 
		IoCallBack recvcb; 
		IoCallBack errorcb; 
	} SOCK_IO_MANAGER, *PSOCK_IO_MANAGER; 
 
	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; 
 
	PSOCK_IO_MANAGER ppsim[MAX_CONNECT]; 
	int simCount; 
	int lastErrorCode; 
	static bool Inited; 
	static PTEMP_BUFFER ptb; 
	static CRITICAL_SECTION SendCS; 
	static CRITICAL_SECTION RecvCS; 
 
	bool InitBuffer(PSOCK_IO_BUFFER psib, int BufferSize = 0); 
	void FreeBuffer(PSOCK_IO_BUFFER psib); 
	int GetSockIndex(SOCKET sock); 
	PVOID GetSim(SOCKET sock); 
}; 
 
#endif // !defined(AFX_SOCKMGR_H__D063F8D1_0584_40E3_8930_0004059BDFC8__INCLUDED_)