Files

402 lines
11 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#ifndef SERVER_USER_MANAGER_HEAD_FILE
#define SERVER_USER_MANAGER_HEAD_FILE
#pragma once
#include "AfxTempl.h"
#include "GameServiceHead.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
class GAME_SERVICE_CLASS CServerUserItem : public IServerUserItem, public IServerUserService
{
//<2F><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
friend class CServerUserManager;
//<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
protected:
tagUserInfo m_UserInfo; //<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
tagUserRule m_UserRule; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
tagUserScore m_ScoreFormer; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
tagUserProperty m_UserProperty; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
protected:
tagVariationInfo m_RecordInfo; //<2F><>¼<EFBFBD><C2BC>Ϣ
tagVariationInfo m_VariationInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
protected:
DWORD m_dwUserRight; //<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
DWORD m_dwMasterRight; //<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
//<2F>йܱ<D0B9><DCB1><EFBFBD>
protected:
SCORE m_lTrusteeScore; //<2F>йܻ<D0B9><DCBB><EFBFBD>
SCORE m_lRestrictScore; //<2F><><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>
SCORE m_lFrozenedScore; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
DWORD m_dwCardLibIndex; //ʹ<><CAB9><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
DWORD m_dwStartLibTime; //<2F>ƿ⿪ʼʹ<CABC><CAB9>ʱ<EFBFBD><CAB1>
DWORD m_dwStopLibTime; //<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1>
BYTE m_cbCardLibEnabled; //<2F>ƿ<EFBFBD><C6BF><EFBFBD>Ч<EFBFBD><D0A7>־
//<2F><>¼<EFBFBD><C2BC>Ϣ
protected:
DWORD m_dwDBQuestID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
DWORD m_dwLogonTime; //<2F><>¼ʱ<C2BC><CAB1>
DWORD m_dwInoutIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
protected:
bool m_bMobileUser; //<2F>ֻ<EFBFBD><D6BB>û<EFBFBD>
bool m_bAndroidUser; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
bool m_bCheatUser; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
bool m_bClientReady; //<2F><><EFBFBD>ӱ<EFBFBD>־
bool m_bModifyScore; //<2F>޸ı<DEB8>־
TCHAR m_szLogonPass[LEN_PASSWORD]; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
BYTE m_cbReUserStatus; //<2F><>ԭ״̬
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
protected:
WORD m_wBindIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD m_dwClientAddr; //<2F><><EFBFBD>ӵ<EFBFBD>ַ
TCHAR m_szMachineID[LEN_MACHINE_ID]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
protected:
IServerUserItemSink * m_pIServerUserItemSink; //<2F>ص<EFBFBD><D8B5>ӿ<EFBFBD>
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
protected:
WORD m_wDeskPos; //<2F><>ǰ<EFBFBD><C7B0>ҳ
WORD m_wDeskCount; //<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>
WORD m_wMobileUserRule; //<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
protected:
DWORD m_dwSignUpTime; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
BYTE m_cbMatchStatus; //<2F><><EFBFBD><EFBFBD>״̬
VOID * m_pMatchData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
static DWORD g_dwCardLibCount; //<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>;
static BYTE g_cbCardLibEnable; //<2F>ƿ<EFBFBD><C6BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>;
static DWORD g_dwLibStartDateTime; //<2F>ƿ⿪ʼʹ<CABC>ÿ<EFBFBD>ʼʱ<CABC><CAB1>;
static DWORD g_dwLibEndDateTime; //<2F>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD>ʼʱ<CABC><CAB1>;
static DWORD g_dwCardLibCustomCount; //<2F>ƿ<EFBFBD><C6BF>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CServerUserItem();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CServerUserItem();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release() { delete this; }
//<2F>ӿڲ<D3BF>ѯ
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetBindIndex() { return m_wBindIndex; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ַ
virtual DWORD GetClientAddr() { return m_dwClientAddr; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
virtual LPCTSTR GetMachineID() { return m_szMachineID; }
//<2F><>¼<EFBFBD><C2BC>Ϣ
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
virtual DWORD GetDBQuestID() { return m_dwDBQuestID++; }
//<2F><>¼ʱ<C2BC><CAB1>
virtual DWORD GetLogonTime() { return m_dwLogonTime; }
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
virtual DWORD GetInoutIndex() { return m_dwInoutIndex; }
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
virtual tagUserInfo * GetUserInfo() { return &m_UserInfo; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual tagUserRule * GetUserRule() { return &m_UserRule; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual tagUserProperty * GetUserProperty() { return &m_UserProperty; };
//ʱ<><CAB1><EFBFBD><EFBFBD>Ϣ
virtual tagTimeInfo * GetTimeInfo() { return &m_UserInfo.TimerInfo; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD><C3BB>Ա<EFBFBD>
virtual BYTE GetGender() { return m_UserInfo.cbGender; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ʶ
virtual DWORD GetUserID() { return m_UserInfo.dwUserID; }
//<2F><>Ϸ<EFBFBD><CFB7>ʶ
virtual DWORD GetGameID() { return m_UserInfo.dwGameID; }
//<2F>û<EFBFBD><C3BB>dz<EFBFBD>
virtual LPCTSTR GetNickName() { return m_UserInfo.szNickName; }
//״̬<D7B4>ӿ<EFBFBD>
public:
//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
virtual WORD GetTableID() { return m_UserInfo.wTableID; }
//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
virtual WORD GetChairID() { return m_UserInfo.wChairID; }
//<2F>û<EFBFBD>״̬
virtual BYTE GetUserStatus() { return m_UserInfo.cbUserStatus; }
//Ȩ<><C8A8><EFBFBD><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
virtual DWORD GetUserRight() { return m_dwUserRight; }
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
virtual DWORD GetMasterRight() { return m_dwMasterRight; }
//<2F>ȼ<EFBFBD><C8BC><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD>Ȩ<EFBFBD><C8A8>
virtual BYTE GetMemberOrder() { return m_UserInfo.cbMemberOrder; }
//<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
virtual BYTE GetMasterOrder() { return m_UserInfo.cbMasterOrder; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual SCORE GetUserScore() { return m_UserInfo.lScore; }
//<2F>û<EFBFBD><C3BB>ɼ<EFBFBD>
virtual SCORE GetUserGrade() { return m_UserInfo.lGrade; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual SCORE GetUserInsure() { return m_UserInfo.lInsure; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>;
virtual BYTE getScoreMultiple();
//<2F>й<EFBFBD><D0B9><EFBFBD>Ϣ
public:
//<2F>йܻ<D0B9><DCBB><EFBFBD>
virtual SCORE GetTrusteeScore() { return m_lTrusteeScore; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual SCORE GetFrozenedScore() { return m_lFrozenedScore; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
//<2F>û<EFBFBD>ʤ<EFBFBD><CAA4>
virtual WORD GetUserWinRate();
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetUserLostRate();
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetUserDrawRate();
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetUserFleeRate();
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual DWORD GetUserPlayCount() { return m_UserInfo.dwWinCount+m_UserInfo.dwLostCount+m_UserInfo.dwDrawCount+m_UserInfo.dwFleeCount; }
//Ч<><D0A7><EFBFBD>ӿ<EFBFBD>
public:
//<2F>Ա<EFBFBD><D4B1>ʺ<EFBFBD>
virtual bool ContrastNickName(LPCTSTR pszNickName);
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>
virtual bool ContrastLogonPass(LPCTSTR pszPassword);
//<2F><>Ϸ״̬
public:
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool IsClientReady() { return m_bClientReady; };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual VOID SetClientReady(bool bClientReady) { m_bClientReady=bClientReady; }
//<2F><>ԭ״̬
virtual BYTE GetReUserStatus(){ return m_cbReUserStatus; }
//<2F><><EFBFBD><EFBFBD>״̬
virtual void SetReUserStatus(BYTE cbReUserStatus) { m_cbReUserStatus = cbReUserStatus; }
//<2F>ֻ<EFBFBD><D6BB>û<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool IsMobileUser() { return m_bMobileUser; }
//<2F><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>
virtual VOID SetMobileUser(bool bMobileUser) { m_bMobileUser=bMobileUser; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool IsAndroidUser() { return m_bAndroidUser; }
//<2F><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>
virtual VOID SetAndroidUser(bool bAndroidUser) { m_bAndroidUser=bAndroidUser; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
virtual bool IsCheatUser() { return m_bCheatUser; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
virtual void SetCheatUser(bool bFlag) { m_bCheatUser = bFlag; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual VOID * GetMatchData() { return m_pMatchData; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual VOID SetMatchData(VOID * pMatchData) { m_pMatchData=pMatchData; }
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual DWORD GetSignUpTime() { return m_dwSignUpTime; }
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual VOID SetSignUpTime(DWORD dwSignUpTime) { m_dwSignUpTime=dwSignUpTime; }
//<2F><><EFBFBD><EFBFBD>״̬
virtual BYTE GetUserMatchStatus() { return m_cbMatchStatus; }
//<2F><><EFBFBD><EFBFBD>״̬
virtual VOID SetUserMatchStatus(BYTE cbMatchStatus) { m_cbMatchStatus = cbMatchStatus; }
//<2F>ƿ<EFBFBD><C6BF>ӿ<EFBFBD>
public:
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ƿ<EFBFBD>
virtual bool canUseCardLib();
//<2F><>ȡ<EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
virtual DWORD getCardLibIndex();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
virtual void setCardLibIndex(DWORD dwCardLibIndex);
//<2F>ۼ<EFBFBD><DBBC>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
virtual void addCardLibIndex();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setCardLibEnabled(bool bEnabled);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
virtual void setUseCardLibTime(DWORD dwStartTime, DWORD dwEndTime);
//˽<>˷<EFBFBD><CBB7>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual VOID addPrivateAction(DWORD dwAction);
//ͳ<><CDB3>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>Ҿ<EFBFBD><D2BE><EFBFBD>
virtual VOID addPrivatePlayCout(WORD wCout);
//<2F><>¼<EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
virtual bool IsVariation() { return m_bModifyScore; }
//<2F><>ѯ<EFBFBD><D1AF>¼
virtual bool QueryRecordInfo(tagVariationInfo & RecordInfo);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
virtual bool DistillVariation(tagVariationInfo & VariationInfo);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD>״̬
virtual bool SetUserStatus(BYTE cbUserStatus, WORD wTableID, WORD wChairID);
//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>;
virtual bool SetUserStatus(BYTE cbUserStatus);
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool WriteUserScore(SCORE lScore, SCORE lGrade, SCORE lRevenue, DWORD dwUserMedal, BYTE cbScoreType, BYTE cbNextScoreMultiple, DWORD dwPlayTimeCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool FrozenedUserScore(SCORE lScore);
//<2F><EFBFBD><E2B6B3><EFBFBD><EFBFBD>
virtual bool UnFrozenedUserScore(SCORE lScore);
//<2F>޸Ľӿ<C4BD>
public:
//<2F>޸<EFBFBD><DEB8><EFBFBD>Ϣ
virtual bool ModifyUserProperty(SCORE lScore, LONG lLoveLiness);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool DetachBindStatus();
//<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
virtual bool ModifyUserInsure(SCORE lScore, SCORE lInsure, SCORE lRevenue);
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
virtual bool SetUserParameter(DWORD dwClientAddr, WORD wBindIndex, TCHAR szMachineID[LEN_MACHINE_ID], bool bAndroidUser, bool bClientReady);
//<2F>޸<EFBFBD>Ȩ<EFBFBD><C8A8>
virtual VOID ModifyUserRight( DWORD dwAddRight, DWORD dwRemoveRight,bool bGameRight=true);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
VOID ResetUserItem();
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetMobileUserRule(){return m_wMobileUserRule;}
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
virtual VOID SetMobileUserRule(WORD wMobileUserRule) { m_wMobileUserRule=wMobileUserRule; }
//<2F><>ǰ<EFBFBD><C7B0>ҳ
virtual WORD GetMobileUserDeskPos(){return m_wDeskPos;}
//<2F><>ǰ<EFBFBD><C7B0>ҳ
virtual VOID SetMobileUserDeskPos(WORD wMobileUserDeskPos){m_wDeskPos=wMobileUserDeskPos;}
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>
virtual WORD GetMobileUserDeskCount(){return m_wDeskCount;}
//<2F><>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>
virtual VOID SetMobileUserDeskCount(WORD wMobileUserDeskCount){m_wDeskCount=wMobileUserDeskCount;}
};
//////////////////////////////////////////////////////////////////////////////////
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef CWHArray<CServerUserItem *> CServerUserItemArray;
typedef CMap<DWORD,DWORD,CServerUserItem *,CServerUserItem *> CServerUserItemMap;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class GAME_SERVICE_CLASS CServerUserManager : public IServerUserManager
{
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
protected:
CServerUserItemMap m_UserIDMap; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
CServerUserItemArray m_UserItemArray; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
CServerUserItemArray m_UserItemStore; //<2F><EFBFBD>û<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
protected:
IServerUserItemSink * m_pIServerUserItemSink; //<2F>ص<EFBFBD><D8B5>ӿ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CServerUserManager();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CServerUserManager();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release() { return; }
//<2F>ӿڲ<D3BF>ѯ
virtual VOID * QueryInterface(REFGUID Guid, DWORD dwQueryVer);
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
public:
//<2F><><EFBFBD>ýӿ<C3BD>
virtual bool SetServerUserItemSink(IUnknownEx * pIUnknownEx);
//<2F><><EFBFBD>Һ<EFBFBD><D2BA><EFBFBD>
public:
//ö<><C3B6><EFBFBD>û<EFBFBD>
virtual IServerUserItem * EnumUserItem(WORD wEnumIndex);
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
virtual IServerUserItem * SearchUserItem(DWORD dwUserID);
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
virtual IServerUserItem * SearchUserItem(LPCTSTR pszNickName);
//ͳ<>ƺ<EFBFBD><C6BA><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual DWORD GetUserItemCount() { return (DWORD)m_UserItemArray.GetCount(); }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
virtual bool DeleteUserItem();
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
virtual bool DeleteUserItem(IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
virtual bool InsertUserItem(IServerUserItem * * pIServerUserResult, tagUserInfo & UserInfo, tagUserInfoPlus & UserInfoPlus);
};
//////////////////////////////////////////////////////////////////////////////////
#endif