📄 iosocket.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 + -