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

📄 gateinfo.cpp

📁 真正的传奇源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   ************************************************************************************** */

void CGateInfo::ProcSelectServer(SOCKET s, WORD wServerIndex)
{
	_TDEFAULTMESSAGE	DefMsg;
	char				szEncodePacket[128];
	char				szEncodeAllPacket[256];
	char				szEncodeMsg[24];
	char				*pServerIP;
	GAMESERVERINFO		*pServerInfo;

	PLISTNODE pListNode = xUserInfoList.GetHead();

	while (pListNode)
	{
		CUserInfo *pUserInfo = xUserInfoList.GetData(pListNode);

		if (pUserInfo->sock == s)
		{
			if (!pUserInfo->fSelServerOk)
			{
				fnMakeDefMessageA(&DefMsg, SM_SELECTSERVER_OK, 0, pUserInfo->nCertification, 0, 0);		
				int nPos = fnEncodeMessageA(&DefMsg, szEncodeMsg, sizeof(szEncodePacket));
				szEncodeMsg[nPos] = '\0';

				for ( PLISTNODE pNode = g_xGameServerList.GetHead(); pNode; pNode = g_xGameServerList.GetNext( pNode ) )
				{
					pServerInfo = g_xGameServerList.GetData( pNode );
					
					if ( pServerInfo->index == wServerIndex )
					{
						pServerIP = pServerInfo->ip;
						pServerInfo->connCnt++;
						break;
					}
				}

				if ( !pServerIP )
					break;

				pUserInfo->nServerID = wServerIndex;

				int nPos2 = fnEncode6BitBufA((unsigned char *)pServerIP, szEncodePacket, memlen(pServerIP), sizeof(szEncodePacket));
				szEncodePacket[nPos2] = '\0';

				memmove(szEncodeAllPacket, szEncodeMsg, nPos);
				memmove(&szEncodeAllPacket[nPos], szEncodePacket, nPos2);
				szEncodeAllPacket[nPos + nPos2] = '\0';

				SendToGate(s, szEncodeAllPacket);

				pUserInfo->fSelServerOk = TRUE;

				pListNode = xUserInfoList.RemoveNode(pListNode);
			}
		}
		else
			pListNode = xUserInfoList.GetNext(pListNode);
	}
}

/* **************************************************************************************

		ParseUserEntry
		
		PURPOSE : 
		
		NOTE

   ************************************************************************************** */

bool CGateInfo::ParseUserEntry( char *buf, _AUSERENTRYINFO *userInfo )
{
	char seps[] = "\001";
	char *token = strtok( buf, seps );
	int  step   = 0;
	
	__try
	{
		while ( token )
		{
			switch ( step++ )
			{
				case 0: strcpy( userInfo->szLoginID, token );
				case 1: strcpy( userInfo->szPassword, token ); 
				case 2: strcpy( userInfo->szUserName, token );
				case 3: strcpy( userInfo->szSSNo, token );
				case 4: strcpy( userInfo->szBirthDay, token ); 
				case 5: strcpy( userInfo->szZipCode, token );
				case 6: strcpy( userInfo->szAddress1, token ); 
				case 7: strcpy( userInfo->szAddress2, token );
				case 8: strcpy( userInfo->szPhone, token ); 
				case 9: strcpy( userInfo->szMobilePhone, token ); 
				case 10: strcpy( userInfo->szEmail, token ); 
				case 11: strcpy( userInfo->szQuiz, token ); 
				case 12: strcpy( userInfo->szAnswer, token ); 
				case 13: strcpy( userInfo->szQuiz2, token ); 
				case 14: strcpy( userInfo->szAnswer2, token ); 
			}	
			
			token = strtok( NULL, seps );
		}
	}
	__except ( EXCEPTION_EXECUTE_HANDLER )
	{
		return false;
	}
	
	return step >= 15;
}

/* **************************************************************************************

		ProcAddUser
		
		PURPOSE : 
		
		NOTE

   ************************************************************************************** */

void CGateInfo::ProcAddUser(SOCKET s, char *pszData)
{
	char				szEntryInfo[2048];
	_AUSERENTRYINFO		UserEntryInfo;
	_TDEFAULTMESSAGE	DefMsg;
	char				szEncodePacket[64];

	int len = fnDecode6BitBufA(pszData, (char *)&szEntryInfo, sizeof(szEntryInfo));
	szEntryInfo[len] = '\0';

	if ( !ParseUserEntry( szEntryInfo, &UserEntryInfo ) )
		fnMakeDefMessageA(&DefMsg, SM_NEWID_FAIL, 0, 0, 0, 0);
	else
	{	
		char szQuery[1024];
		sprintf( szQuery, 
			"SELECT * FROM TBL_ACCOUNT WHERE FLD_LOGINID='%s'",
			UserEntryInfo.szLoginID );

		CRecordset *pRec = GetDBManager()->CreateRecordset();

		if (!pRec->Execute( szQuery ))
			fnMakeDefMessageA(&DefMsg, SM_NEWID_FAIL, 0, 0, 0, 0);

		if ( pRec->Fetch() )
			fnMakeDefMessageA(&DefMsg, SM_NEWID_FAIL, 0, 0, 0, 0);
		else
		{
			GetDBManager()->DestroyRecordset( pRec );

			pRec = GetDBManager()->CreateRecordset();

			sprintf( szQuery, 
				"INSERT TBL_ACCOUNT(FLD_LOGINID, FLD_PASSWORD, FLD_USERNAME, FLD_CERTIFICATION) "
				"VALUES( '%s', '%s', '%s', 0 )",
				UserEntryInfo.szLoginID, 
				UserEntryInfo.szPassword, 
				UserEntryInfo.szUserName );

			pRec->Execute( szQuery );

			sprintf( szQuery,
				"INSERT TBL_ACCOUNTADD(FLD_LOGINID, FLD_SSNO, FLD_BIRTHDAY, FLD_ADDRESS1, FLD_ADDRESS2, "
				                      "FLD_PHONE, FLD_MOBILEPHONE, FLD_EMAIL, FLD_QUIZ1, FLD_ANSWER1, FLD_QUIZ2, FLD_ANSWER2) "
				"VALUES( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )",
				UserEntryInfo.szLoginID,
				UserEntryInfo.szSSNo,
				UserEntryInfo.szBirthDay,
				UserEntryInfo.szAddress1,
				UserEntryInfo.szAddress2,
				UserEntryInfo.szPhone,
				UserEntryInfo.szMobilePhone,
				UserEntryInfo.szEmail,
				UserEntryInfo.szQuiz,
				UserEntryInfo.szAnswer,
				UserEntryInfo.szQuiz2,
				UserEntryInfo.szAnswer2 );

			pRec->Execute( szQuery );
		}

		GetDBManager()->DestroyRecordset( pRec );
				
		fnMakeDefMessageA(&DefMsg, SM_NEWID_SUCCESS, 0, 0, 0, 0);
	
		TCHAR szID[32];
		MultiByteToWideChar( CP_ACP, 0, UserEntryInfo.szLoginID, -1, szID, sizeof( szID ) / sizeof( TCHAR ) );
		InsertLogMsgParam(IDS_COMPLETENEWUSER, szID);
	}		
	
	fnEncodeMessageA(&DefMsg, szEncodePacket, sizeof(szEncodePacket));
	SendToGate(s, szEncodePacket);
}

/* **************************************************************************************

		ProcLogin
		
		PURPOSE : 
		
		NOTE

   ************************************************************************************** */

void CGateInfo::ProcLogin(SOCKET s, char *pszData)
{
	char				szIDPassword[32];
	char				*pszID, *pszPassword;
	char				szEncodePacket[64];
	_TDEFAULTMESSAGE	DefMsg;
	int					nPos;
	char				szQuery[256];

	if (memlen(pszData) - 1 <= 0) return;
	
	PLISTNODE pListNode = xUserInfoList.GetHead();

	while (pListNode)
	{
		CUserInfo *pUserInfo = xUserInfoList.GetData(pListNode);

		if (pUserInfo->sock == s)
		{
			int nDecodeLen = fnDecode6BitBufA(pszData, szIDPassword, sizeof(szIDPassword));
			szIDPassword[nDecodeLen] = '\0';

			pszID		= &szIDPassword[0];

			if (pszPassword	= (char *)memchr(szIDPassword, '/', sizeof(szIDPassword)))
			{
				*pszPassword = '\0';
				pszPassword++;

				sprintf( szQuery, "SELECT * FROM TBL_ACCOUNT WHERE FLD_LOGINID='%s'", pszID );

				CRecordset *pRec = GetDBManager()->CreateRecordset();

				if ( !pRec->Execute( szQuery ) || !pRec->Fetch() )
					fnMakeDefMessageA( &DefMsg, SM_ID_NOTFOUND, 0, 0, 0, 0 );
				else if ( CompareDBString( pszPassword, pRec->Get( "FLD_PASSWORD" ) ) != 0 )
					fnMakeDefMessageA( &DefMsg, SM_PASSWD_FAIL, 0, 0, 0, 0 );
				else
				{
					int nCertCode = atoi( pRec->Get( "FLD_CERTIFICATION" ) );
		/*
					if ( nCertCode > 0 && nCertCode < 30 )
						fnMakeDefMessageA(&DefMsg, SM_CERTIFICATION_FAIL, (nCertCode + 1), 0, 0, 0);
					else if ( nCertCode >= 30 )
						fnMakeDefMessageA(&DefMsg, SM_CERTIFICATION_FAIL, 1, 0, 0, 0);
					else*/
					{
						char szEncodeServerList[512];
						char szEncodeAllPacket[1024];
						
						fnMakeDefMessageA(&DefMsg, SM_PASSOK_SELECTSERVER, 0, 1, 0, 0);		
						nPos = fnEncodeMessageA(&DefMsg, szEncodePacket, sizeof(szEncodePacket));
						szEncodePacket[nPos] = '\0';
						
						int nPos2 = fnEncode6BitBufA((unsigned char *)g_szServerList, szEncodeServerList, memlen(g_szServerList), sizeof(szEncodeServerList));
						szEncodeServerList[nPos2] = '\0';
						
						memmove(szEncodeAllPacket, szEncodePacket, nPos);
						memmove(&szEncodeAllPacket[nPos], szEncodeServerList, memlen(szEncodeServerList));
						
						SendToGate(s, szEncodeAllPacket);
										
						GetDBManager()->DestroyRecordset( pRec );

						pUserInfo->nCertification = GetCertification();

		//				pRec = GetDBManager()->CreateRecordset();
		//				sprintf( szQuery, 
		//					"UPDATE TBL_ACCOUNT SET FLD_CERTIFICATION=%d WHERE FLD_LOGINID='%s'",
		//					GetCertification(), pszID );
		//				pRec->Execute( szQuery );
						
		//				GetDBManager()->DestroyRecordset( pRec );

						return;
					}
				}

				GetDBManager()->DestroyRecordset( pRec );

				nPos = fnEncodeMessageA(&DefMsg, szEncodePacket, sizeof(szEncodePacket));
				szEncodePacket[nPos] = '\0';

				SendToGate(s, szEncodePacket);
			}
		}

		pListNode = xUserInfoList.GetNext(pListNode);
	}
}

⌨️ 快捷键说明

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