Files
wnmj-normal/Servers/服务器组件/游戏服务器/DistributeManager.h

143 lines
3.7 KiB
C
Raw Normal View History

2026-03-03 13:56:44 +08:00
#ifndef DISTRIBUTE_MANAGER_HEAD_FILE
#define DISTRIBUTE_MANAGER_HEAD_FILE
#pragma once
#include "Stdafx.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagDistributeInfo
{
WORD wDistribute; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
WORD wLastTableID; //<2F>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
DWORD dwClientAddr; //<2F><><EFBFBD>ҵ<EFBFBD>ַ
DWORD dwSequence; //<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
IServerUserItem * pIServerUserItem; //<2F>û<EFBFBD><C3BB>ӿ<EFBFBD>
VOID * pPertainNode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagDistributeNode
{
tagDistributeNode * pPrepDistributeNode; //ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>
tagDistributeNode * pNextDistributeNode; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
tagDistributeNode * pNextSameTableNode; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagDistributeInfo DistributeInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
tagDistributeNode()
{
pPrepDistributeNode=NULL;
pNextDistributeNode=NULL;
pNextSameTableNode=NULL;
}
~tagDistributeNode()
{
pPrepDistributeNode=NULL;
pNextDistributeNode=NULL;
pNextSameTableNode=NULL;
}
};
//////////////////////////////////////////////////////////////////////////////////
typedef CWHArray<tagDistributeInfo> CDistributeInfoArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CDistributeNodePool
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
static const int BLOCK_SIZE;
static tagDistributeNode * m_pHeadOfFreeList;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDistributeNodePool();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
~CDistributeNodePool();
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagDistributeNode * AllocNode();
//<2F>ͷŽ<CDB7><C5BD><EFBFBD>
VOID FreeNode(void * pNode);
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CDistributeManager
{
//<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
protected:
WORD m_wNodeCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
WORD m_wRealCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
WORD m_wAndroidCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
DWORD m_dwSequence; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CDistributeNodePool m_DistributeNodePool; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagDistributeNode * m_pHeadNode; //ͷ<><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
BYTE m_cbDistributeRule; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CDistributeManager();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CDistributeManager();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
inline WORD GetCount() { return m_wNodeCount; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
inline WORD GetRealCount() { return m_wRealCount; };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
inline WORD GetAndroidCount() { return m_wAndroidCount; };
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
inline VOID SetDistributeRule(BYTE cbDistributeRule) { m_cbDistributeRule=cbDistributeRule; }
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>
tagDistributeNode* SearchNode(const IServerUserItem * const pIServerUserItem);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL InsertDistributeNode(const tagDistributeInfo & DistributeInfo);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
VOID RemoveDistributeNode(tagDistributeNode * pDistributeNode);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
VOID RemoveDistributeNode(const IServerUserItem * pIServerUserItem);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
VOID RemoveAll();
//ִ<>з<EFBFBD><D0B7><EFBFBD>
WORD PerformDistribute(CDistributeInfoArray & DistributeInfoArray,WORD wNeedCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//IPַͬ
inline BOOL FilterRuleExitsIPAddr(const CDistributeInfoArray & DistributeInfoArray,DWORD dwClientAddr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline BOOL FilterRuleIsAllAndroid(const CDistributeInfoArray & DistributeInfoArray, IServerUserItem * const pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline BOOL FilterRuleAdjacent(const CDistributeInfoArray & DistributeInfoArray, DWORD dwSequence);
};
//////////////////////////////////////////////////////////////////////////////////
#endif