165 lines
4.3 KiB
C
165 lines
4.3 KiB
C
|
|
#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
|