Files
wnmj-normal/Servers/服务器组件/协调服务器/GlobalInfoManager.h
2026-03-03 13:56:44 +08:00

287 lines
6.5 KiB
C++

#ifndef GLOBAL_USER_MANAGER_HEAD_FILE
#define GLOBAL_USER_MANAGER_HEAD_FILE
#pragma once
#include "Stdafx.h"
#include "AfxTempl.h"
//////////////////////////////////////////////////////////////////////////////////
//类说明
class CGlobalUserItem;
class CGlobalPlazaItem;
class CGlobalServerItem;
//数组定义
typedef CWHArray<CGlobalUserItem *> CGlobalUserItemArray;
typedef CWHArray<CGlobalPlazaItem *> CGlobalPlazaItemArray;
typedef CWHArray<CGlobalServerItem *> CGlobalServerItemArray;
//索引定义
typedef CMap<DWORD,DWORD,CGlobalUserItem *,CGlobalUserItem *> CMapUserID;
typedef CMap<DWORD,DWORD,CGlobalUserItem *,CGlobalUserItem *> CMapGameID;
typedef CMap<WORD,WORD,CGlobalPlazaItem *,CGlobalPlazaItem *> CMapPlazaID;
typedef CMap<WORD,WORD,CGlobalServerItem *,CGlobalServerItem *> CMapServerID;
//////////////////////////////////////////////////////////////////////////////////
//结构定义
//用户信息
struct tagGlobalUserInfo
{
//用户信息
DWORD dwUserID; //用户标识
DWORD dwGameID; //游戏标识
TCHAR szNickName[LEN_NICKNAME]; //用户昵称
//辅助信息
BYTE cbGender; //用户性别
BYTE cbMemberOrder; //会员等级
BYTE cbMasterOrder; //管理等级
};
//////////////////////////////////////////////////////////////////////////////////
//用户子项
class CGlobalUserItem
{
//友元定义
friend class CGlobalInfoManager;
//用户属性
public:
DWORD m_dwUserID; //用户标识
DWORD m_dwGameID; //游戏标识
TCHAR m_szNickName[LEN_NICKNAME]; //用户昵称
//辅助信息
public:
BYTE m_cbGender; //用户性别
BYTE m_cbMemberOrder; //会员等级
BYTE m_cbMasterOrder; //管理等级
//房间信息
public:
CGlobalServerItemArray m_GlobalServerItemArray; //房间数组
//链表属性
protected:
CGlobalUserItem * m_pNextUserItemPtr; //对象指针
//函数定义
protected:
//构造函数
CGlobalUserItem();
//析构函数
virtual ~CGlobalUserItem();
//功能函数
public:
//用户标识
DWORD GetUserID() { return m_dwUserID; }
//游戏标识
DWORD GetGameID() { return m_dwGameID; }
//用户昵称
LPCTSTR GetNickName() { return m_szNickName; }
//用户信息
public:
//用户性别
BYTE GetGender() { return m_cbGender; }
//会员等级
BYTE GetMemberOrder() { return m_cbMemberOrder; }
//会员等级
BYTE GetMasterOrder() { return m_cbMasterOrder; }
//其他信息
public:
//枚举房间
CGlobalServerItem * EnumServerItem(WORD wIndex);
};
//////////////////////////////////////////////////////////////////////////////////
//广场子项
class CGlobalPlazaItem
{
//友元定义
friend class CGlobalInfoManager;
//变量定义
public:
WORD m_wIndex; //绑定索引
tagGamePlaza m_GamePlaza; //游戏广场
//索引变量
public:
CMapUserID m_MapUserID; //用户索引
//链表属性
protected:
CGlobalPlazaItem * m_pNextPlazaItemPtr; //对象指针
//函数定义
protected:
//构造函数
CGlobalPlazaItem();
//析构函数
virtual ~CGlobalPlazaItem();
};
//////////////////////////////////////////////////////////////////////////////////
//房间子项
class CGlobalServerItem
{
//友元定义
friend class CGlobalInfoManager;
//变量定义
public:
WORD m_wIndex; //绑定索引
tagGameServer m_GameServer; //游戏房间
tagGameMatch m_GameMatch; //游戏比赛
//索引变量
public:
CMapUserID m_MapUserID; //用户索引
//链表属性
protected:
CGlobalServerItem * m_pNextServerItemPtr; //对象指针
//函数定义
protected:
//构造函数
CGlobalServerItem();
//析构函数
virtual ~CGlobalServerItem();
//功能函数
public:
//绑定索引
WORD GetIndex() { return m_wIndex; }
//获取类型
WORD GetKindID() { return m_GameServer.wKindID; }
//获取房间
WORD GetServerID() { return m_GameServer.wServerID; }
//用户数目
DWORD GetUserItemCount() { return (DWORD)m_MapUserID.GetCount(); }
//比赛房间
bool IsMatchServer() { return (m_GameMatch.wServerID==m_GameServer.wServerID) && m_GameMatch.dwMatchID!=0; }
//查找函数
public:
//寻找用户
CGlobalUserItem * SearchUserItem(DWORD dwUserID);
};
//////////////////////////////////////////////////////////////////////////////////
//全局信息
class CGlobalInfoManager
{
//索引变量
protected:
CMapUserID m_MapUserID; //用户标识
CMapPlazaID m_MapPlazaID; //广场标识
CMapServerID m_MapServerID; //房间标识
//辅助索引
protected:
CMapGameID m_MapGameID; //标识索引
CMapStringToPtr m_MapNickName; //昵称索引
//存储变量
protected:
CGlobalUserItem * m_pGlobalUserItem; //用户存储
CGlobalPlazaItem * m_pGlobalPlazaItem; //广场存储
CGlobalServerItem * m_pGlobalServerItem; //房间存储
//函数定义
public:
//构造函数
CGlobalInfoManager();
//析构函数
virtual ~CGlobalInfoManager();
//管理函数
public:
//重置数据
VOID ResetData();
//用户数目
DWORD GetUserItemCount() { return (DWORD)m_MapUserID.GetCount(); }
//大厅数目
DWORD GetPlazaItemCount() { return (DWORD)m_MapPlazaID.GetCount(); }
//房间数目
DWORD GetServerItemCount() { return (DWORD)m_MapServerID.GetCount(); }
//用户管理
public:
//删除用户
bool DeleteUserItem(DWORD dwUserID, WORD wServerID);
//激活用户
bool ActiveUserItem(tagGlobalUserInfo & GlobalUserInfo, WORD wServerID);
//广场管理
public:
//删除广场
bool DeletePlazaItem(WORD wPlazaID);
//激活广场
bool ActivePlazaItem(WORD wBindIndex, tagGamePlaza & GamePlaza);
//房间管理
public:
//删除房间
bool DeleteServerItem(WORD wServerID);
//激活房间
bool ActiveServerItem(WORD wBindIndex, tagGameServer & GameServer);
//服务查找
public:
//寻找广场
CGlobalPlazaItem * SearchPlazaItem(WORD wPlazaID);
//寻找房间
CGlobalServerItem * SearchServerItem(WORD wServerID);
//用户查找
public:
//寻找用户
CGlobalUserItem * SearchUserItemByUserID(DWORD dwUserID);
//寻找用户
CGlobalUserItem * SearchUserItemByGameID(DWORD dwGameID);
//寻找用户
CGlobalUserItem * SearchUserItemByNickName(LPCTSTR pszNickName);
//枚举函数
public:
//枚举用户
CGlobalUserItem * EnumUserItem(POSITION & Position);
//枚举广场
CGlobalPlazaItem * EnumPlazaItem(POSITION & Position);
//枚举房间
CGlobalServerItem * EnumServerItem(POSITION & Position);
//创建函数
private:
//创建用户
CGlobalUserItem * CreateGlobalUserItem();
//创建广场
CGlobalPlazaItem * CreateGlobalPlazaItem();
//创建房间
CGlobalServerItem * CreateGlobalServerItem();
//释放函数
private:
//释放用户
bool FreeGlobalUserItem(CGlobalUserItem * pGlobalUserItem);
//释放广场
bool FreeGlobalPlazaItem(CGlobalPlazaItem * pGlobalPlazaItem);
//释放房间
bool FreeGlobalServerItem(CGlobalServerItem * pGlobalServerItem);
};
//////////////////////////////////////////////////////////////////////////////////
#endif