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

📄 csocket.h

📁 用VC在BREW平台上开发的手机游戏Superball的源代码
💻 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 + -