143 lines
3.7 KiB
C
143 lines
3.7 KiB
C
|
|
#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
|