init
This commit is contained in:
165
Servers/服务器组件/比赛服务/DistributeManager.h
Normal file
165
Servers/服务器组件/比赛服务/DistributeManager.h
Normal file
@@ -0,0 +1,165 @@
|
||||
#ifndef DISTRIBUTE_MANAGER_HEAD_FILE
|
||||
#define DISTRIBUTE_MANAGER_HEAD_FILE
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Stdafx.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//同桌信息
|
||||
struct tagSameTableInfo
|
||||
{
|
||||
WORD wPlayerCount; //玩家数目
|
||||
DWORD wPlayerIDSet[16]; //玩家集合
|
||||
};
|
||||
|
||||
//分组数据
|
||||
struct tagDistributeInfo
|
||||
{
|
||||
WORD wDistribute; //分配等级
|
||||
DWORD dwClientAddr; //玩家地址
|
||||
DWORD dwInsertStamp; //插入时间
|
||||
IServerUserItem * pIServerUserItem; //用户接口
|
||||
VOID * pPertainNode; //所属结点
|
||||
};
|
||||
|
||||
//分组结点
|
||||
struct tagDistributeNode
|
||||
{
|
||||
tagDistributeNode * pPrepDistributeNode; //前一结点
|
||||
tagDistributeNode * pNextDistributeNode; //下一结点
|
||||
tagDistributeInfo DistributeInfo; //分组信息
|
||||
|
||||
tagDistributeNode()
|
||||
{
|
||||
pPrepDistributeNode=NULL;
|
||||
pNextDistributeNode=NULL;
|
||||
}
|
||||
~tagDistributeNode()
|
||||
{
|
||||
pPrepDistributeNode=NULL;
|
||||
pNextDistributeNode=NULL;
|
||||
}
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//类型定义
|
||||
typedef CWHArray<tagDistributeInfo> CDistributeInfoArray; //分组数组
|
||||
typedef CWHArray<tagSameTableInfo *> CSameTableArray; //同坐数组
|
||||
typedef CMap<DWORD,DWORD,tagSameTableInfo *, tagSameTableInfo*> CSameTableMap; //同桌信息
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//结点池
|
||||
class CDistributeNodePool
|
||||
{
|
||||
//管理变量
|
||||
public:
|
||||
static const int BLOCK_SIZE;
|
||||
static tagDistributeNode * m_pHeadOfFreeList;
|
||||
|
||||
//函数定义
|
||||
public:
|
||||
//构造函数
|
||||
CDistributeNodePool();
|
||||
//析构函数
|
||||
~CDistributeNodePool();
|
||||
|
||||
//功能函数
|
||||
public:
|
||||
//分配结点
|
||||
tagDistributeNode * AllocNode();
|
||||
//释放结点
|
||||
VOID FreeNode(void * pNode);
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//分组管理
|
||||
class CDistributeManager
|
||||
{
|
||||
//数目变量
|
||||
protected:
|
||||
WORD m_wNodeCount; //结点数目
|
||||
WORD m_wRealCount; //真人数目
|
||||
WORD m_wAndroidCount; //机器数目
|
||||
|
||||
//存储变量
|
||||
protected:
|
||||
CSameTableArray m_SameTableBuffer; //同桌缓冲
|
||||
CSameTableArray m_SameTableActive; //同桌数组
|
||||
CSameTableMap m_SameTableMap; //同桌字典
|
||||
|
||||
//管理变量
|
||||
protected:
|
||||
CDistributeNodePool m_DistributeNodePool; //结点池
|
||||
tagDistributeNode * m_pHeadNode; //头部结点
|
||||
|
||||
//分组变量
|
||||
protected:
|
||||
BYTE m_cbDistributeRule; //分组规则
|
||||
|
||||
//函数定义
|
||||
public:
|
||||
//构造函数
|
||||
CDistributeManager();
|
||||
//析构函数
|
||||
virtual ~CDistributeManager();
|
||||
|
||||
//内联函数
|
||||
public:
|
||||
//结点数目
|
||||
inline WORD GetCount() { return m_wNodeCount; }
|
||||
//真人数目
|
||||
inline WORD GetRealCount() { return m_wRealCount; };
|
||||
//机器数目
|
||||
inline WORD GetAndroidCount() { return m_wAndroidCount; };
|
||||
//设置规则
|
||||
inline VOID SetDistributeRule(BYTE cbDistributeRule) { m_cbDistributeRule=cbDistributeRule; }
|
||||
|
||||
//功能函数
|
||||
public:
|
||||
//移除结点
|
||||
VOID RemoveAll();
|
||||
//插入结点
|
||||
BOOL InsertDistributeNode(const tagDistributeInfo & DistributeInfo);
|
||||
//移除结点
|
||||
VOID RemoveDistributeNode(tagDistributeNode * pDistributeNode);
|
||||
//移除结点
|
||||
VOID RemoveDistributeNode(const IServerUserItem * pIServerUserItem);
|
||||
//执行分组
|
||||
WORD PerformDistribute(CDistributeInfoArray & DistributeInfoArray,WORD wNeedCount);
|
||||
|
||||
//功能函数
|
||||
public:
|
||||
//查找结点
|
||||
tagDistributeNode* SearchNode(const IServerUserItem * const pIServerUserItem);
|
||||
//获取信息
|
||||
tagSameTableInfo * GetUserSameTableInfo(DWORD dwUserID);
|
||||
//移除信息
|
||||
VOID RemoveUserSameTableInfo(DWORD dwUserID);
|
||||
|
||||
//内部函数
|
||||
protected:
|
||||
//激活对象
|
||||
tagSameTableInfo * ActiveSameTableInfo();
|
||||
//移除对象
|
||||
VOID RemoveSameTableInfo(tagSameTableInfo * pSameTableInfo);
|
||||
//获得机器人的数目;
|
||||
WORD GetAndroidNum(const CDistributeInfoArray & DistributeInfoArray);
|
||||
|
||||
//规则函数
|
||||
protected:
|
||||
//IP同址
|
||||
inline BOOL FilterRuleExitsIPAddr(const CDistributeInfoArray & DistributeInfoArray,DWORD dwClientAddr);
|
||||
//机器过滤
|
||||
inline BOOL FilterRuleIsAllAndroid(const CDistributeInfoArray & DistributeInfoArray, IServerUserItem * const pIServerUserItem);
|
||||
//上局同桌
|
||||
inline BOOL FilterRuleIsLastSameTable(const CDistributeInfoArray & DistributeInfoArray,DWORD dwUserID);
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user