📄 csocket.h
字号:
// CSocket.h: interface for the CSocket class.
//
//////////////////////////////////////////////////////////////////////
#ifndef _CSOCKET_H_
#define _CSOCKET_H_
#include "AppFrame.h"
#include "AEEAppGen.h"
#include "AEEStdlib.h"
#include "AEENet.h"
#include "AEEHeap.h"
#include "SingleGamePacket.h"
#define INPUT_BUF_LEN ((32+1)*1024)
#define OUTPUT_BUF_LEN (1024)
#define ResponseTestConnecting_Type 0xFE
enum ServerType{
ST_Login,
ST_Game
};
///////////////////////////////////////////////////////////////////////
//外部消息
#define EVT_GAMESOCKET_BASE (EVT_USER +550)
#define EVT_GAMESOCKET_END (EVT_USER +560)
#define EVT_GAMESOCKET_CONNECT (EVT_GAMESOCKET_BASE)
#define EVT_GAMESOCKET_SENDPACKET (EVT_GAMESOCKET_BASE+1)
#define EVT_GAMESOCKET_READPACKET (EVT_GAMESOCKET_BASE+2)
#define EVT_GAMESOCKET_CLOSE (EVT_GAMESOCKET_BASE+3)
#define EVT_GAMESOCKET_CANCELED (EVT_GAMESOCKET_BASE+4)
#define EVT_GAMESOCKET_WAITING (EVT_GAMESOCKET_BASE+5)
#define EVT_GAMESOCKET_READING (EVT_GAMESOCKET_BASE+6)
//wParam
#define GAMESOCKET_SUCCESS 0
#define GAMESOCKET_FAIL 1
#define GAMESOCKET_DNS_FAIL 2
#define GAMESOCKET_CONNECT_FAIL 3
// #define GAMESOCKET_CONNECT_SUCCESS 0
///////////////////////////////////////////////////////////////////////
//定义数据包包头
//在SingleGamePacket.h中定义
//typedef struct{
// uint8 iType;
// uint8 iGameType;
// uint8 iClientType;
// uint8 iOption;
// int32 iLength;
//}PacketHeader;
//typedef struct {
// uint16 type;
// uint16 version;
// uint16 length;
// int8 errcode;
// int8 option;
//}PacketHeader;
//////////////////////////////////////////////////////////////////////
class CSocket : public VisibleObj
{
public:
CSocket();
virtual ~CSocket();
//完成初始化,分配内存空间
virtual AppResult Open();
//释放接口对象及初始化时申请的空间
virtual AppResult Close();
virtual AppResult Enable() { return SUCCESS;}
virtual AppResult Disable(){return SUCCESS;}
//事件处理函数,主要在同步传送时屏蔽除CLR以外的按键消息
boolean HandleEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam);
//建立Socket连接
boolean Connect(const char* pzServerName, uint16 iServerPort);
boolean ConnectByIP(const char* IPaddr, uint16 iServerPort);
//关闭SOCKET连接
void SocketClose();
//将传入的数据包追加到发送缓冲区中然后一起发送。
boolean SendPacket(uint8 iType,uint16 iLength, void * pv);
//释放指针
void CSocket::ReleaseObj(void ** ppObj);
//用DNS解析IP 地址并利用回调函数返回消息
boolean DNS();
//利用成员数据中的IP地址和端口建立SOCKET连接
boolean RealConnect();
void BeginSynConnect();
void EndSynConnect();
public:
/*********************静态成员变量,作为回调函数*************************/
//DNS回调函数
static void DNSReturn(CSocket* ps);
// ISOCKET_Connect连接的回调函数
static void ServerConnected(CSocket *ps, int nErr);
//从发送缓冲区向SOCKET写入一个数据包
static boolean Send(CSocket* ps);
//从SOCKET中读出数据包负载并填到接收缓冲区中
static boolean ReadPayload(CSocket* ps);
//从SOCKET中读出数据包头并填到接收缓冲区中
static boolean ReadPacket(CSocket* ps);
//发送断开数据包到服务器
static void CloseSocketAndSend(CSocket*ps);
public:
AEEApplet* m_pApp;
INetMgr * m_pINetMgr;
ISocket * m_pISocket;
AEEDNSResult m_dnsr; // DNS Result
AEECallback m_cb; // Callback for DNS
byte * m_pOutputBuf; //发送缓冲区
uint32 m_iOutputBufEnd; //已写入发送缓冲区的数据的长度
byte * m_pInputBuf; //接收缓冲区
char m_szServerHostName[32]; //服务器名
INAddr m_ServerHostIP; //服务器IP地址
uint16 m_iServerPort; //服务器端口
uint32 m_Caller; //消息返回时作为ISHELL_PostEvent 的最后一个参数
uint32 m_iReadTotal ; //已读的字节总数
uint32 m_iWriteTotal ; //已写的自己总数
boolean m_ReConnect; //是否需要重新连接
uint8 m_bWaitConnecting; //正在连接
uint8 m_bSynConnect; //同步连接,需要提示请等待画面
uint8 m_bCanceled;
uint16 m_ServerVersion; //服务器版本,在确认连接包中得到
uint8 m_iServerType; //服务器类型
uint8 m_iGameType; //包头的数据
uint8 m_iClientType; //包头的数据
};
#endif // !defined(AFX_CSOCKET_H__0281DD8E_E269_498E_8CD7_F7B1E887936B__INCLUDED_)
// void CGameSocket_New(AEEApplet* pApp);
// boolean CGameSocket_Free(CGameSocket* pthis);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -