www.pudn.com > [Server]Distribute.rar > UserTable.h


// UserTable.h: interface for the CUserTable class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_USERTABLE_H__5BBB3509_10AF_4E68_9B3A_C07E9F23D2A9__INCLUDED_) 
#define AFX_USERTABLE_H__5BBB3509_10AF_4E68_9B3A_C07E9F23D2A9__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
//#include "ServerSystem.h" 
//#include  
 
 
BOOL DisconnectUser(DWORD dwConnectionIndex); 
BOOL DisconnectUser( DWORD dwConnectionIndex, int flag ); 
 
#include "Crypt.h" 
 
struct aGAMEOPTION 
{ 
	BYTE bNoFriend; 
	BYTE bNoWhisper; 
 
	aGAMEOPTION():bNoWhisper(0), bNoFriend(0) {} 
}; 
 
typedef struct tagUSERINFO 
{ 
	DWORD dwConnectionIndex; 
	DWORD dwCharacterID; 
	DWORD dwUserID; 
	BYTE UserLevel; 
	DWORD dwMapServerConnectionIndex; 
	WORD  wUserMapNum; 
	DWORD dwCharacterIDS[4];	// À¯Àú°¡ °¡Áø ij¸¯¹øÈ£¸¦ ºñ±³ÇϱâÀ§ÇÔ 
	BYTE bLoginMapNum[4]; 
 
	DWORD State; 
	BOOL bRecvDistOut; 
	 
#ifdef _NETWORKTEST 
	DWORD dwStartTrafficTime; 
	DWORD dwTrafficForUserSend[MP_MAX]; 
	DWORD dwTrafficForServerSend[MP_MAX]; 
	DWORD dwPacketForUserSend[MP_MAX]; 
	DWORD dwPacketForServerSend[MP_MAX]; 
	void AddPacketForUser(DWORD c, DWORD size) 
	{ 
		dwTrafficForUserSend[c] += size; 
		++dwPacketForUserSend[c]; 
	} 
	void AddPacketForServer(DWORD c, DWORD size) 
	{ 
		dwTrafficForServerSend[c] += size; 
		++dwPacketForServerSend[c]; 
	} 
#endif 
 
	DWORD dwUniqueConnectIdx;	// ¼­¹ö¿¡¼­ÀÇ °íÀ¯ ¿¬°á ¹øÈ£ 
								// dwConnectionIdx¿Í´Â ´Ù¸§. °è¼Ó Áõ°¡ÇÔ 
 
	CCrypt crypto; 
	BYTE CheckSum; 
 
	aGAMEOPTION GameOption; 
 
	BOOL CheckCorrectCheckSum(BYTE CS) 
	{ 
		if(CS != CheckSum) 
			return FALSE; 
		++CheckSum; 
		return TRUE; 
	} 
 
	DWORD dwLastConnectionCheckTime; 
	BOOL m_ConnectionCheckFailed; 
}USERINFO; 
 
class CUserTable : public CYHHashTable 
{ 
 
	DWORD m_MaxUserCount; 
 
	DWORD m_dwUserCount; 
 
 
	DWORD m_addCount; 
	DWORD m_removeCount; 
 
public: 
	CUserTable(); 
	virtual ~CUserTable(); 
	void SetPositionUserHead() {  CYHHashTable::SetPositionHead(); } 
	USERINFO * GetUserData() { return CYHHashTable::GetData(); } 
	void Init(DWORD dwBucket); 
	USERINFO * FindUser(DWORD dwKey); 
	BOOL AddUser(USERINFO* pObject,DWORD dwKey); 
	USERINFO * RemoveUser(DWORD dwKey); 
	void RemoveAllUser(); 
 
	DWORD GetUserCount(){ return m_dwUserCount; } 
 
	DWORD GetUserMaxCount(){return m_MaxUserCount;} 
	void SetCalcMaxCount(DWORD CurCount); 
	 
	BOOL SendToUser(DWORD dwKey,DWORD dwUniqueConnectIdx,MSGBASE* pmsg,DWORD size); 
	BOOL OnDisconnectUser(DWORD dwKey); 
 
	DWORD GetAddCount() { return m_addCount; } 
	DWORD GetRemoveCount() { return m_removeCount; } 
};   
 
 
extern CUserTable * g_pUserTable;							// key : connectionidx 
 
#endif // !defined(AFX_USERTABLE_H__5BBB3509_10AF_4E68_9B3A_C07E9F23D2A9__INCLUDED_)