Files

165 lines
4.3 KiB
C
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#ifndef DISTRIBUTE_MANAGER_HEAD_FILE
#define DISTRIBUTE_MANAGER_HEAD_FILE
#pragma once
#include "Stdafx.h"
//////////////////////////////////////////////////////////////////////////////////
//ͬ<><CDAC><EFBFBD><EFBFBD>Ϣ
struct tagSameTableInfo
{
WORD wPlayerCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
DWORD wPlayerIDSet[16]; //<2F><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagDistributeInfo
{
WORD wDistribute; //<2F><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
DWORD dwClientAddr; //<2F><><EFBFBD>ҵ<EFBFBD>ַ
DWORD dwInsertStamp; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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>
tagDistributeInfo DistributeInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
tagDistributeNode()
{
pPrepDistributeNode=NULL;
pNextDistributeNode=NULL;
}
~tagDistributeNode()
{
pPrepDistributeNode=NULL;
pNextDistributeNode=NULL;
}
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
typedef CWHArray<tagDistributeInfo> CDistributeInfoArray; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef CWHArray<tagSameTableInfo *> CSameTableArray; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef CMap<DWORD,DWORD,tagSameTableInfo *, tagSameTableInfo*> CSameTableMap; //ͬ<><CDAC><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>Ŀ
//<2F><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
protected:
CSameTableArray m_SameTableBuffer; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CSameTableArray m_SameTableActive; //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CSameTableMap m_SameTableMap; //ͬ<><CDAC><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>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
VOID RemoveAll();
//<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);
//ִ<>з<EFBFBD><D0B7><EFBFBD>
WORD PerformDistribute(CDistributeInfoArray & DistributeInfoArray,WORD wNeedCount);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>
tagDistributeNode* SearchNode(const IServerUserItem * const pIServerUserItem);
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
tagSameTableInfo * GetUserSameTableInfo(DWORD dwUserID);
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD>Ϣ
VOID RemoveUserSameTableInfo(DWORD dwUserID);
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagSameTableInfo * ActiveSameTableInfo();
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
VOID RemoveSameTableInfo(tagSameTableInfo * pSameTableInfo);
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>Ŀ;
WORD GetAndroidNum(const CDistributeInfoArray & DistributeInfoArray);
//<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><CDAC>
inline BOOL FilterRuleIsLastSameTable(const CDistributeInfoArray & DistributeInfoArray,DWORD dwUserID);
};
//////////////////////////////////////////////////////////////////////////////////
#endif