Files
mir_server/Gateway/srvlib/include/server_def.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

179 lines
5.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _SERVER_DEF_H_
#define _SERVER_DEF_H_
/*****************************************************
*
* 服务端通用定义文件
*
*****************************************************/
#include "os_def.h"
#define TAG_VALUE 0xCCEE //默认的包的开头的2个字节
#define SMALL_HEAD
#pragma pack(push,4)
typedef struct
{
int tag;
int len;
struct
{
uint16_t dataSum;
uint16_t hdrSum;
} EncodePart;
#ifndef SMALL_HEAD
union
{
struct
{
int recvTime; // 网关接收消耗时间
int sendTime; // 网关发送消耗时间
}s;
int64_t reserve; // 时间点,用于网关接受到客户端数据后打上的时间戳。
}u;
#endif
}DATAHEADER;
typedef struct
{
uint64_t socket_;
uint16_t index_;
uint16_t gate_id_;
}NetId;
#pragma pack(pop)
/*******
网关与内部服务器通信协议以及基础数据结构定义
**********************************************************/
#define RUNTEMPCODE 0XEEFF // temp部分也用来校验
#define GM_OPEN 1 // 打开新用户会话,当客户端连接到网关时网关向服务器发送此消息
#define GM_CLOSE 2 // 关闭用户会话,当客户端与网关的链接断开时网关向服务器发送此消息
#define GM_CHECKSERVER 3 // 网关回应服务器的心跳包消息
#define GM_CHECKCLIENT 4 // 服务器向网关发送心跳包消息
#define GM_DATA 5 // 网关转发用户通信数据到服务器,服务器向网关发送用户通信数据也使用此消息
#define GM_SERVERUSERINDEX 6 // 服务器回应网关新连接的用户在服务器上分配的用户ID号
#define GM_APPKEEPALIVE 7 // 服务器给网关发的应用层心跳包
#define GM_APPKEEPALIVEACK 8 // 网关回应服务器的应用层心跳包
#define GM_APPBIGPACK 9 // 应用层大包
#define GM_GATEUSERINFO 10 // 网关通知服务器网关用户数量
#define GM_CLOSE_SERVER 0xEEF1 // 关闭网关程序
#define RUNGATECODE 0xAA55AA55 // 网关通信
typedef unsigned short WORD;
typedef unsigned int DWORD;
/* 网关通信协议头 */
typedef struct tagGateMsgHdr
{
unsigned long long nSocket; //网关连接套接字标识(用户套接字)
unsigned int dwGateCode; //标识码总是为RUNGATECODE
WORD wSessionIdx; //网关用户ID由网关生成
WORD wIdent; //通信消息号
WORD wServerIdx; //服务器用户ID由服务器返回
WORD wTemp; //保留
int nDataSize; //通信数据大小(不包括协议头)
long long tickCount; //收到该数据包的时间
}GATEMSGHDR, *PGATEMSGHDR;
typedef struct tagGateUserInfo
{
int nGatePort; // 网关监听用户连接的端口号
int nUserCount; // 网关当前建立用户连接的数量
}GATEUSERINFO, *PGATEUSERINFO;
typedef int ActorId;
typedef int64_t FuBenUId;
// 用于测试网络传包性能的特殊id
#define TEST_GATEAY_CODE 0xfabc1254adee
#define TEST_SERVER_CODE 0xffbb56facedd
#define TEST_SERVER_CODE1 0x12698745200d
namespace SrvDef
{
/* 服务器类型定义 */
typedef enum tagServerType
{
InvalidServer = 0, //未定义服务器类型
LogServer = 2, //日志服务器
SessionServer = 4, //会话服务器
T_DBServer = 5, //数据服务器
T_GameServer = 6, //游戏服务器
GateServer = 1, //网关服务器
}SERVERTYPE;
/* 获取服务器类型名称字符串 */
inline const char* getServerTypeName(int eServerType)
{
switch(eServerType)
{
case GateServer: return ("gateway");
case LogServer: return ("log");
case SessionServer: return ("login");
case T_DBServer: return ("db");
case T_GameServer: return ("game");
default: return ("unknow");
}
}
/******
* 服务器注册结构,当服务器连接到另一个服务器,
* 需要发送注册服务器的数据结构以便注册服务器,
* 注册服务器成功后才可正常通信。
****************************************************/
typedef struct tagServerRegistData
{
static const int GT_ID = 0x12AA66CA;
int GameType; //游戏ID固定为0x12AA66CA
int ServerType; //服务器类型值为SERVERTYPE枚举类型中的枚举值
int ServerIndex; //服务器唯一编号(服务器编号仅对游戏服务器有意义)
int Recv1;
char ServerName[64]; //服务器名称需包含0终止符
}SERVER_REGDATA, *PSERVER_REGDATA;
//定义字符串数据长度
static const int MAX_ACCOUNT_NAME_LENGTH = 80; //最大的账户名字长度
static const int ACCOUNT_LENGTH = 81; //账户的buff长度
typedef char ACCOUNT[ACCOUNT_LENGTH];
static const int MAX_ACTOR_NAME_LENGTH = 32; //最大的玩家名字的长度
static const int ACTOR_NAME_BUFF_LENGTH = 33; //玩家名字的buff长度
typedef char ACTORNAME[ACTOR_NAME_BUFF_LENGTH]; //玩家的名字
static const int MAX_PASSWD_LENGTH = 32; //最大的密码长度
static const int MAX_GUILD_NAME_LENGTH = 32; //最大的公会的名字
/***
* 游戏网关路由表结构
*******************************************/
typedef struct tagGameServerRoute
{
int nServerIndex; //服务器ID
int nRouteCount; //路由地址数量
struct
{
char sHost[124]; //服务器地址(支持域名)
int nPort; //服务器端口
} RouteTable[16]; //路由地址表
}GAMESERVERROUTE, *PGAMESERVERROUTE;
}
#endif