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" //#includeBOOL 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_)