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

📄 dbsvr.h

📁 真正的传奇源代码
💻 H
字号:

#pragma once

#define PACKET_KEEPALIVE		"%++$"

#define LOGPARAM_STR			1
#define LOGPARAM_INT			2

class CServerInfo
{
public:
	SOCKET					m_sock;

	// For Overlapped I/O
	OVERLAPPED				Overlapped;
	WSABUF					DataBuf;
	INT						nOvFlag;
	CHAR					Buffer[DATA_BUFSIZE];
	CHAR					RemainBuff[DATA_BUFSIZE];
	INT						nRemainBuffLen;
};

class CUserInfo
{
public:
	SOCKET		sock;
	TCHAR		szSockHandle[4];

	TCHAR		szUserID[11];				// User ID
	TCHAR		szAddress[20];				// User's local address 
	
	BYTE		btPayMode;
	
	int			nClientVersion;
	int			nCertification;
	BOOL		fVersionAccept;
	BOOL		fSelServerOk;
};

class CGateInfo
{
public:
	SOCKET					sock;

	CWHList<CUserInfo*>		xUserInfoList;
													  
	WSABUF					DataBuf;
	CHAR					Buffer[DATA_BUFSIZE];
	int						bufLen;

	CWHQueue				m_GateQ;

public:
	void	ReceiveOpenUser(char *pszPacket);
	void	ReceiveCloseUser(char *pszPacket);
	void	ReceiveSendUser(char *pszPacket);

	void	QueryCharacter(SOCKET s, char *pszPacket);
	void	DeleteExistCharacter(SOCKET s, _LPTCREATECHR lpTCreateChr);
	void	MakeNewCharacter(SOCKET s, _LPTCREATECHR lpTCreateChr);
	void	GetSelectCharacter(SOCKET s, char *pszPacket);

	void	SendToGate(SOCKET cSock, char *pszPacket);

	__inline void SendKeepAlivePacket() { send(sock, PACKET_KEEPALIVE, sizeof(PACKET_KEEPALIVE), 0); }

	// ORZ:
	CGateInfo()
	{
		bufLen	= 0;
	}

	int  Recv()
	{
		return recv( sock, Buffer + bufLen, DATA_BUFSIZE - bufLen, 0 );
	}

	bool HasCompletionPacket()
	{
		return memchr( Buffer, '$', bufLen ) ? true : false;
	}

	// recv 滚欺俊辑 肯己等 窍唱狼 菩哦阑 惶酒辰促.
	char * ExtractPacket( char *pPacket )
	{
		int packetLen = (char *) memchr( Buffer, '$', bufLen ) - Buffer + 1;

		memcpy( pPacket, Buffer, packetLen );

		memmove( Buffer, Buffer + packetLen, DATA_BUFSIZE - packetLen );
		bufLen -= packetLen;

		return pPacket + packetLen;
	}
};


// ORZ:
struct GAMESERVERINFO
{
	int  index;
	char name[50];
	char ip[50];
	int  connCnt;	// 立加 荐 包府

	CServerInfo*	pServerInfo;
};


typedef struct tag_TSENDBUFF
{
	CServerInfo*		pServerInfo;

	int					nCertification;
	_TDEFAULTMESSAGE	DefMsg;
	_TLOADHUMAN			HumanLoad;
	BYTE				*lpbtAddData;
	BYTE				*lpbtAddData2;
} _TSENDBUFF, *_LPTSENDBUFF;

typedef struct tag_TGATESENDBUFF
{
	SOCKET				sock;
	char				szData[1024];
}_TGATESENDBUFF, *_LPTGATESENDBUFF;

void InsertLogMsg(UINT nID);
void InsertLogMsg(LPTSTR lpszMsg);
void InsertLogMsgParam(UINT nID, void *pParam, BYTE btFlags = LOGPARAM_STR);

⌨️ 快捷键说明

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