Files
wnmj/Classes/Global/ServerListData.h

356 lines
8.3 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#ifndef SERVER_LIST_DATA_HEAD_FILE
#define SERVER_LIST_DATA_HEAD_FILE
#pragma once
#include <vector>
#include <map>
#include "Struct.h"
#include "Types.h"
//////////////////////////////////////////////////////////////////////////////////
//枚举定义
//子项类型
enum enItemGenre
{
ItemGenre_Type, //游戏种类
ItemGenre_Kind, //游戏类型
ItemGenre_Node, //游戏节点
ItemGenre_Page, //游戏页面
ItemGenre_Server, //游戏房间
ItemGenre_Inside, //游戏内部
};
//房间状态
enum enServerStatus
{
ServerStatus_Normal, //正常状态
ServerStatus_Entrance, //正在使用
ServerStatus_EverEntrance, //曾经进入
};
//查找
enum enFindRoom
{
FindByGameKindID, //游戏类型
FindByServerTypeID //房间类型
};
//////////////////////////////////////////////////////////////////////////////////
//类说明
class CGameListItem;
class CGameTypeItem;
class CGameKindItem;
class CGameServerItem;
class CGameInsideItem;
//数组说明
typedef std::vector<CGameListItem *> CGameListItemArray;
//索引说明
typedef std::map<uint16, CGameTypeItem* > CGameTypeItemMap;
typedef std::map<uint16, CGameKindItem* > CGameKindItemMap;
typedef std::map<uint16, CGameServerItem* > CGameServerItemMap;
//////////////////////////////////////////////////////////////////////////////////
//列表接口
struct IServerListDataSink
{
//状态通知
public:
//完成通知
virtual void OnGameItemFinish()=0;
//完成通知
virtual void OnGameKindFinish(uint16 wKindID)=0;
//更新通知
virtual void OnGameItemUpdateFinish()=0;
//更新通知
public:
//插入通知
virtual void OnGameItemInsert(CGameListItem * pGameListItem)=0;
//更新通知
virtual void OnGameItemUpdate(CGameListItem * pGameListItem)=0;
//删除通知
virtual void OnGameItemDelete(CGameListItem * pGameListItem)=0;
};
//////////////////////////////////////////////////////////////////////////////////
//列表子项
class CGameListItem
{
//友元定义
friend class CServerListData;
//属性数据
protected:
enItemGenre m_ItemGenre; //子项类型
CGameListItem * m_pParentListItem; //父项子项
//函数定义
protected:
//构造函数
CGameListItem(enItemGenre ItemGenre);
//析构函数
virtual ~CGameListItem();
//功能函数
public:
//获取类型
enItemGenre GetItemGenre() { return m_ItemGenre; }
//获取父项
CGameListItem * GetParentListItem() { return m_pParentListItem; }
//重载函数
public:
//排列索引
virtual uint16 GetSortID()=0;
};
//////////////////////////////////////////////////////////////////////////////////
//种类结构
class CGameTypeItem : public CGameListItem
{
//属性数据
public:
tagGameType m_GameType; //种类信息
//函数定义
public:
//构造函数
CGameTypeItem();
//析构函数
virtual ~CGameTypeItem();
//重载函数
public:
//排列索引
virtual uint16 GetSortID() { return m_GameType.wSortID; }
};
//////////////////////////////////////////////////////////////////////////////////
//类型结构
class CGameKindItem : public CGameListItem
{
//属性数据
public:
tagGameKind m_GameKind; //类型信息
//更新变量
public:
bool m_bUpdateItem; //更新标志
uint32 m_dwUpdateTime; //更新时间
//扩展数据
public:
uint32 m_dwProcessVersion; //游戏版本
//函数定义
public:
//构造函数
CGameKindItem();
//析构函数
virtual ~CGameKindItem();
//重载函数
public:
//排列索引
virtual uint16 GetSortID() { return m_GameKind.wSortID; }
};
//////////////////////////////////////////////////////////////////////////////////
//房间结构
class CGameServerItem : public CGameListItem
{
//属性数据
public:
tagGameServer m_GameServer; //房间信息
tagGameMatch m_GameMatch; //比赛信息
//用户数据
public:
bool m_bSignuped; //报名标识
//扩展数据
public:
enServerStatus m_ServerStatus; //房间状态
//辅助变量
public:
CGameKindItem * m_pGameKindItem; //游戏类型
//函数定义
public:
//构造函数
CGameServerItem();
//析构函数
virtual ~CGameServerItem();
//重载函数
public:
//排列索引
virtual uint16 GetSortID() { return m_GameServer.wSortID; }
//金币房间
virtual bool IsGoldRoom() { return (m_GameServer.wServerType&GAME_GENRE_GOLD) != 0; }
//比赛房间
virtual bool IsMatchRoom() { return (m_GameServer.wServerType&GAME_GENRE_MATCH)!=0; }
//私人房间
virtual bool IsPrivateRoom() { return (m_GameServer.wServerType&GAME_GENRE_PRIVATE)!=0; }
//获取游戏ID
virtual uint16 GetKindID();
};
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//内部结构
class CGameInsideItem : public CGameListItem
{
//属性数据
public:
uint32 m_dwInsideID; //内部 ID
//函数定义
public:
//构造函数
CGameInsideItem();
//析构函数
virtual ~CGameInsideItem();
//重载函数
public:
//排列索引
virtual uint16 GetSortID() { return 0L; }
};
//////////////////////////////////////////////////////////////////////////////////
//列表服务
class CServerListData
{
//静态函数
public:
//获取对象
static CServerListData* shared();
static void purge();
//索引变量
protected:
CGameTypeItemMap m_GameTypeItemMap; //种类索引
CGameKindItemMap m_GameKindItemMap; //类型索引
CGameServerItemMap m_GameServerItemMap; //房间索引
//内核变量
protected:
CGameListItemArray m_GameListItemWait; //等待子项
IServerListDataSink * m_pIServerListDataSink; //回调接口
public:
uint32 m_dwAllOnLineCount; //总在线人数
//函数定义
private:
//构造函数
CServerListData();
//析构函数
virtual ~CServerListData();
public:
static CGameServerItem* getGameServerByKind(uint16 wDataID, uint8 cbFindType = FindByGameKindID);
//配置函数
public:
//设置接口
void SetServerListDataSink(IServerListDataSink * pIServerListDataSink);
//状态通知
public:
//完成通知
void OnEventListFinish();
//完成通知
void OnEventKindFinish(uint16 wKindID);
//下载通知
void OnEventDownLoadFinish(uint16 wKindID);
//人数函数
public:
//设置人数
void SetKindOnLineCount(uint16 wKindID, uint32 dwOnLineCount);
//设置人数
void SetServerOnLineCount(uint16 wServerID, uint32 dwOnLineCount);
//设置人数
void SetServerOnLineFinish();
//插入函数
public:
//插入种类
bool InsertGameType(tagGameType * pGameType);
//插入类型
bool InsertGameKind(tagGameKind * pGameKind);
//插入房间
bool InsertGameServer(tagGameServer * pGameServer);
//删除函数
public:
//删除种类
bool DeleteGameType(uint16 wTypeID);
//删除类型
bool DeleteGameKind(uint16 wKindID);
//删除房间
bool DeleteGameServer(uint16 wServerID);
//枚举函数
public:
//枚举种类
int getTypeCount(){
return m_GameTypeItemMap.size();
};
int getKindCount(){
return m_GameKindItemMap.size();
}
//枚举种类
CGameTypeItemMap::iterator GetTypeItemMapBegin() { return m_GameTypeItemMap.begin(); }
CGameTypeItem * EmunGameTypeItem(CGameTypeItemMap::iterator &it);
//枚举类型
CGameKindItemMap::iterator GetKindItemMapBegin() { return m_GameKindItemMap.begin(); }
CGameKindItem * EmunGameKindItem(CGameKindItemMap::iterator &it);
//枚举房间
CGameServerItemMap::iterator GetServerItemMapBegin() { return m_GameServerItemMap.begin(); }
CGameServerItem * EmunGameServerItem(CGameServerItemMap::iterator &it);
CGameServerItemMap& GetServerItemMap() { return m_GameServerItemMap; };
//查找函数
public:
//查找种类
CGameTypeItem * SearchGameType(uint16 wTypeID);
//查找类型
CGameKindItem * SearchGameKind(uint16 wKindID);
//查找房间
CGameServerItem * SearchGameServer(uint16 wServerID);
//数目函数
public:
//种类数目
uint32 GetGameTypeCount() { return (uint32)m_GameTypeItemMap.size(); }
//类型数目
uint32 GetGameKindCount() { return (uint32)m_GameKindItemMap.size(); }
//房间数目
uint32 GetGameServerCount() { return (uint32)m_GameServerItemMap.size(); }
//获取总在线人数
uint32 GetAllOnLineCount();//{return m_dwAllOnLineCount;}
};
//////////////////////////////////////////////////////////////////////////////////
#endif