📄 gateinfo.cpp
字号:
************************************************************************************** */
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 + -