⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usertable.h

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 H
字号:
#ifndef USERTABLE_H
#define USERTABLE_H

#include "stdafx.h"
#include "struct.h"
#include "servertable.h"

#define SIZE_OF_USER_DISCONNECT_TICK		5
#define MAX_ALLOWED_SLEEP_TIME				5			// x*15, 75檬.

enum USER_STATUS
{
	STATUS_USER_NOT_CERTIFIED		=	0,
	STATUS_USER_ACTIVATED			=	1,
	STATUS_USER_INACTIVATED			=	2,
	STATUS_USER_AWAITING_DISCONNECT	=	3
};

#ifdef __IS_PROXY_SERVER
enum CLIENT_TYPE
{
	CLIENT_TYPE_NORMAL							=	0,
	CLIENT_TYPE_ILLEGAL							=	1,
	CLIENT_TYPE_MANAGER_UNDER_AUTHENTICATION	=	2,
	CLIENT_TYPE_MANAGER							=	3
};

#define MANAGER_CLIENT_FIRST_PACKET_TYPE		421
#define MANAGER_CLIENT_FIRST_PACKET_SIZE		0
#define MANAGER_CLIENT_FIRST_PACKET_CRC			247	//Modified by KBS 020330
#endif

class CConnection;

struct USERINFO;
struct USERINFO_LIST;

struct USERINFO
{
	DWORD			dwConnectionIndex;
	DWORD			dwID;
	DWORD			dwStatus;
	DWORD			dwAddress;

	USERINFO_LIST*	pAwaitingDisconnectUserInfoList;

#ifdef __IS_PROXY_SERVER
	DWORD			dwType;
#endif

#ifdef __IS_AGENT_SERVER
	DWORD			dwSleepProcessTick;

	DWORD			dwMapServerConnectionIndex;
	DWORD			dwDBDemonConnectionIndex;
#endif

	BYTE			bNameLength;

	char			szName[21];
	char			szIP[21];

	bool			bAmILogon;
	bool			bOnConnectUserCalled;

	WORD			wUDPPort;
	WORD			wPort;

	//2001/01/29 zhh
	char			logintime[15];		//肺弊牢 茄 矫埃 历厘

	USERINFO*		pPrvUserInfo;
	USERINFO*		pNextUserInfo;
};


struct USERINFO_LIST
{
	DWORD			dwTick;
	USERINFO*		pUserInfo;
	USERINFO_LIST*	pPrvUserInfoList;
	USERINFO_LIST*	pNextUserInfoList;
};

class CUserTable
{

	DWORD					m_wMaxBucketNum;
	DWORD					m_dwUserNum;
	DWORD					m_dwDisconnectTick;

	USERINFO_LIST			*m_pAwaitingDisconnectUserList[SIZE_OF_USER_DISCONNECT_TICK];

	USERINFO**				m_ppInfoTable;
	
	void					RemoveAllUserTable();
	void					AddUserInfo(USERINFO* info);

	DWORD					IncreaseDisconnectTick();

#ifdef __IS_AGENT_SERVER
	DWORD					m_dwSleepProcessTick;
#endif

public:								  
	void					RemoveUserID(DWORD id);
	void					RemoveUser(DWORD dwConnectionIndex);
	void					RemoveUserFromAwaitingDisconnectUserList( USERINFO *pUserInfo );
	void					DisconnectUserImmediately( USERINFO *pUserInfo );
	void					DisconnectUserImmediately( DWORD dwConnectionIndex );
	void					SetTickForSleptTimeProcess( USERINFO *pUserInfo );

	bool					DisconnectUserBySuggest( USERINFO* pUserInfo );
	bool					DisconnectUserBySuggest( USERINFO* pUserInfo, WORD wRajaCmdNum );
	bool					IsUserAvailable( USERINFO* pUserInfo );
	bool					IsUserAvailable( DWORD dwUserID );
	bool					SendToUser( USERINFO* pUserInfo, char* pMsg, DWORD dwLength );
	bool					SendToUser( DWORD dwUserID, char* pMsg, DWORD dwLength );
	bool					SendToUserByConnectionIndex( DWORD dwConnectionIndex, char* pMsg, DWORD dwLength );

	DWORD					AddUser(DWORD dwConnectionIndex);
	DWORD					CloseConnectionWithAwaitingToDisconnect();
	DWORD					GetUserNum();
	DWORD					GetBucketNum(){return m_wMaxBucketNum;}

	USERINFO*				GetUserInfo(DWORD id);
	USERINFO**				GetUserInfoTable(){return m_ppInfoTable;}
	USERINFO_LIST*			GetUserInfoList( DWORD dwTick );

#ifdef __IS_AGENT_SERVER
	DWORD					CloseConnectionWithSleepingUsers( void );
	DWORD					RemoveAllUserByMapServerConnectionIndex(DWORD dwMapServerConnectionIndex);
	DWORD					RemoveAllUserByDBDemonConnectionIndex(DWORD dwDBDemonConnectionIndex);
#endif

	CUserTable( WORD wMaxBucketNum );
	~CUserTable();
};

extern CUserTable* g_pUserTable;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -