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

📄 iosocket.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//IOSocket.h
/*/////////////////////////////////////////////////////////////////////////////
	Socket IO模型控制管理
	李亦
	2006.06.20
/*//////////////////////////////////////////////////////////////////////////////


#ifndef __INC_IOSOCKET_H
#define __INC_IOSOCKET_H

#ifndef _CSDEFINE_H_
#include "server/CSDefine.h"
#endif

#ifndef _PLATFORM_H_
#include "platform/platform.h"
#endif


namespace CS
{

	enum
	{
		E_IOFAILED			= Net::IOFailed,
		E_IOINVALID			= Net::IOInvalid,
		E_IOOK				= Net::IOOK,
		E_IODISCONNECTED	= Net::IODisconnected,
	};


#define MAX_IO_HANDLERS			8
#define INVALID_IO_HANDLER		((CS_IOHANDLER*) NULL)




#pragma pack(push,1)
typedef struct _tagIOSocketHandler
{

	INT   (RPGAPI2 *pGetError)	(void *pInternal);
	char *(RPGAPI2 *pQuery)		(void);
	int	(RPGAPI2 *pInsert)	(void);
	int	(RPGAPI2 *pRemove)	(void);
	BOOL  (RPGAPI2 *pCheckAccept)	(void *pInternal);
	BOOL  (RPGAPI2 *pCheckRecv)	(void *pInternal);
	BOOL  (RPGAPI2 *pCheckSend)	(void *pInternal);
	void *(RPGAPI2 *pListen)	(char *svTarget);
	void *(RPGAPI2 *pConnect)	(char *svTarget);
	void *(RPGAPI2 *pAccept)	(void *pInternal, char *svAddr, int nMaxLen);
	int	(RPGAPI2 *pClose)		(void *pInternal);
	int	(RPGAPI2 *pRecv)		(void *pInternal, BYTE *pInData, int *pnInDataLen);
	int	(RPGAPI2 *pSend)		(void *pInternal, BYTE *pData, int nDataLen);
	int	(RPGAPI2 *pRecvEx)	(void *pInternal, BYTE **pInData, int *pnInDataLen);
	int	(RPGAPI2 *pSendEx)	(void *pInternal, BYTE *pData, int nDataLen);
	void  (RPGAPI2 *pFree)		(void *pInternal, BYTE *pBuffer);
	int	(RPGAPI2 *pGetConnectAddr)(void *pInternal, char *svTarget, int nMaxLen);
	void*	(RPGAPI2 *pGetNetAddress)(void *pInternal);
} CS_IOHANDLER;
#pragma pack(pop)


// IO Handler Manager Functions

class CIOHandlerManager
{
public:
	
private:
	CS_IOHANDLER	*m_pIOHandlers[MAX_IO_HANDLERS];
	


public:
	CIOHandlerManager();
	virtual ~CIOHandlerManager();

public:
	virtual int		Insert(CS_IOHANDLER *handler);
	virtual int		Remove(int handlernum);
	virtual char	*Query(int nHandler);
	virtual int		GetHandlerCount(void);
	virtual CS_IOHANDLER	*GetHandler(int nHandler);
	virtual CS_IOHANDLER	*GetHandlerByID(char *svID);
};






#pragma pack(push, 1)
// Socket class
// IO Handler Structure


class CIOSocket 
{
	friend class ErrorHandle;
private:
	CS_IOHANDLER	*m_pIOSockHandle;
	void				*m_pData;
	//char				m_svRmtAddr[256];
	INT				m_nLastError;
	BOOL				m_bNeedToKill;

private:
	//class ErrorHandle
	//{
	//	CIOSocket* m_pSocket;
	//public:
	//	ErrorHandle(CIOSocket* pSocket)	{m_pSocket = pSocket;}
	//	~ErrorHandle()							{m_pSocket->SaveError();}
	//};

public:
	CIOSocket(CS_IOHANDLER *pHandler);
	virtual ~CIOSocket();

public:
	BOOL HasError()	{return m_nLastError != 0;}
	void SaveError();
	void SetKill(BOOL bSet){m_bNeedToKill = bSet;}
	BOOL IsNeedKill(){return m_bNeedToKill;}

	virtual BOOL CheckAccept();
	virtual BOOL CheckRecv();
	virtual BOOL CheckSend();

	virtual CIOSocket *Accept(void);
	virtual int		Listen(char *svTarget);
	virtual int		Connect(char *svTarget);
	virtual int		Close(void);
	virtual int		Recv(BYTE *pInData, int *pnInDataLen);
	virtual int		Send(BYTE *pData, int nDataLen);
	virtual int		RecvEx(BYTE **pInData, int *pnInDataLen);
	virtual int		SendEx(BYTE *pData, int nDataLen);
	virtual void	Free(BYTE *pBuffer);
	virtual int		GetRemoteAddr(char *svAddr,int nMaxLen);
	virtual int		GetConnectAddr(char *svAddr,int nMaxLen);
	virtual void*  GetNetAddress();
};


#pragma pack(pop)

};//namespace CS


#endif



⌨️ 快捷键说明

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