#ifndef DISTRIBUTE_MANAGER_HEAD_FILE #define DISTRIBUTE_MANAGER_HEAD_FILE #pragma once #include "Stdafx.h" ////////////////////////////////////////////////////////////////////////////////// //分组数据 struct tagDistributeInfo { WORD wDistribute; //分配等级 WORD wLastTableID; //上局桌号 IServerUserItem * pIServerUserItem; //用户接口 VOID * pPertainNode; //所属结点 }; //分组结点 struct tagDistributeNode { tagDistributeNode * pPrepDistributeNode; //前一结点 tagDistributeNode * pNextDistributeNode; //下一结点 tagDistributeInfo DistributeInfo; //分组信息 }; ////////////////////////////////////////////////////////////////////////////////// typedef CWHArray CDistributeInfoArray; //分组数组 ////////////////////////////////////////////////////////////////////////////////// //结点池 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: 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; } //内部函数 protected: //查找结点 tagDistributeNode* SearchNode(const IServerUserItem * const pIServerUserItem); //功能函数 public: //移除结点 VOID RemoveAll(); //移除结点 VOID RemoveDistributeNode(tagDistributeNode * pDistributeNode); //移除结点 VOID RemoveDistributeNode(const IServerUserItem * pIServerUserItem); //插入结点 BOOL InsertDistributeNode(const tagDistributeInfo & DistributeInfo); //执行分组 WORD PerformDistribute(CDistributeInfoArray & DistributeInfoArray, WORD wNeedCount); //过滤函数 protected: //IP同址 inline BOOL FilterRuleExitsIPAddr(const CDistributeInfoArray & DistributeInfoArray, DWORD dwClientAddr); //上局同桌 inline BOOL FilterRuleExitsSameTable(const CDistributeInfoArray & DistributeInfoArray, WORD wLastTableID); //机器过滤 inline BOOL FilterRuleIsAllAndroid(const CDistributeInfoArray & DistributeInfoArray, IServerUserItem * const pIServerUserItem); }; ////////////////////////////////////////////////////////////////////////////////// #endif