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

📄 commondefine.h

📁 实现P2P NAT 客户端之间的通信,可以在同一LAN之间通信,也可以在不同LAN中相互通信
💻 H
字号:

#ifndef __COMMON_DEFINE_H__
#define __COMMON_DEFINE_H__

#include <Windows.h>
#include "PeerList.h"

#pragma comment(lib, "WS2_32")	// 链接到WS2_32.lib

#define MAX_TRY_NUMBER		10

#define SERVER_PORT			9096
#define MAX_PACKET_SIZE		1024

// 各种消息标识宏
#define INVALID_MSG			-1
#define MSG_USERLOGIN		1						// 用户登陆
#define MSG_USERLOGACK		2						// 发送确认用户登陆的信息
#define MSG_GETUSERLIST		3						// 获取用户列表
#define MSG_USERLISTCMP		4						// 用户列表传送完毕
#define MSG_P2PMSG			5						// 发送P2P信息
#define MSG_P2PCONNECT		6						// 有用户请求让另一个用户向它发送打洞消息
#define MSG_P2PMSGACK		7
#define MSG_P2PCONNECTACK	8
#define MSG_USERLOGOUT		9						// 通知server用户退出
#define MSG_USERACTIVEQUERY	10						// 查询用户是否还存在

class MSGDef										// 定义消息的结构体
{
public:
#pragma pack(1)										// 使结构体的数据按照1字节来对齐,省空间

	// 消息头
	struct TMSG_HEADER
	{
		char    cMsgID;								// 消息标识

		TMSG_HEADER(char MsgID = INVALID_MSG)
			: cMsgID(MsgID)
		{
		}
	};

	// 用户登陆
	struct TMSG_USERLOGIN
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_USERLOGIN(const Peer_Info &rPeerinfo)
			: TMSG_HEADER(MSG_USERLOGIN)
		{
			PeerInfo = rPeerinfo;
		}		
	};

	// 发送确认用户登陆的信息
	struct TMSG_USERLOGACK
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_USERLOGACK(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_USERLOGACK)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// 获取用户列表
	struct TMSG_GETUSERLIST
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_GETUSERLIST(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_GETUSERLIST)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// 更新用户列表完毕
	struct TMSG_USERLISTCMP
		: TMSG_HEADER
	{
		TMSG_USERLISTCMP()
			: TMSG_HEADER(MSG_USERLISTCMP)
		{

		}
	};

	// 一个client向另一个client发送消息
	struct TMSG_P2PMSG
		: TMSG_HEADER
	{
		Peer_Info	PeerInfo;
		char		szMsg[MAX_PACKET_SIZE - sizeof(TMSG_HEADER) - sizeof(Peer_Info)];

		TMSG_P2PMSG(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_P2PMSG)
		{
			PeerInfo = rPeerInfo;
			memset(szMsg, 0, MAX_PACKET_SIZE - sizeof(TMSG_HEADER) - sizeof(PeerInfo));
		}
	};

	// 有用户请求让另一个用户向它发送打洞消息
	struct TMSG_P2PCONNECT
		: TMSG_HEADER
	{
		Peer_Info	PeerInfo;
		char		szUserName[MAX_USERNAME];

		TMSG_P2PCONNECT(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_P2PCONNECT)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// client收到另一个client发送的消息之后的确认
	struct TMSG_P2PMSGACK
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_P2PMSGACK(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_P2PMSGACK)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// 接收到节点的打洞消息,在这里设置它的P2P通信地址
	struct TMSG_P2PCONNECTACK
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_P2PCONNECTACK(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_P2PCONNECTACK)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// 通知server用户退出
	struct TMSG_USERLOGOUT
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;
		TMSG_USERLOGOUT(const Peer_Info& rPeerInfo)
			: TMSG_HEADER(MSG_USERLOGOUT)
		{
			PeerInfo = rPeerInfo;
		}
	};

	// 查询用户是否还存在
	struct TMSG_USERACTIVEQUERY
		: TMSG_HEADER
	{
		Peer_Info PeerInfo;

		TMSG_USERACTIVEQUERY(const Peer_Info& rPeerInfo = Peer_Info())
			: TMSG_HEADER(MSG_USERACTIVEQUERY)
		{
			PeerInfo = rPeerInfo;
		}
	};

#pragma pack()
};

#endif // __COMMON_DEFINE_H__

⌨️ 快捷键说明

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