📄 distributedbmsgparser.cpp
字号:
msg.dwData1 = AuthKey;
msg.dwData2 = dwConnectionIdx;
msg.bData = UserLevel;
g_Network.Send2Server(pAgentServer->dwConnectionIndex,(char*)&msg,sizeof(msg));
g_pLoginUser.Remove( pUserInfo->dwUserID );
}
}
break;
case 2: // ID¾øÀ½.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_WRONGIDPW);
}
break;
case 3: // ºñ¹Ð¹øÈ£¿À·ù.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_WRONGIDPW);
}
break;
case 4: // °ÔÀÓ¿¡ Á¢¼ÓÁß.
{
if(g_nServerSetNum == ServerNo)
{
MSG_DWORD msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_NOTIFY_OVERLAPPEDLOGIN;
msg.dwData = UserIdx;
g_Network.Broadcast2AgentServer((char*)&msg,sizeof(msg));
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_OVERLAPPEDLOGIN,0);
}
else
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_OVERLAPPEDLOGININOTHERSERVER,ServerNo);
}
}
break;
case 5: // ºí·°µÈ °èÁ¤. @state_num = 6ÀÌ¸é °èÁ¤ºí·° (À¥ °ü¸®¸ðµå¿¡¼ »ç¿ë)
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_BLOCKUSERLEVEL);
}
break;
case 7: // DB Connection Error
{
ASSERTMSG(0, "login check error ret 0");
}
break;
case 8: // ÀοøÃʰú
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_MAXUSER );
}
break;
case 14:
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_NOT_CLOSEBETAWINNER );
}
break;
case 15: //¼ºÀμ·¿¡ ¹Ì¼º³âÀÚ°¡ µé¾î¿À·Á°í Çß´Ù.
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_MINOR_INADULTSERVER );
}
break;
case 50: // ȸ¿øÅ»ÅðÇÑ °èÁ¤ÀÓ.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_SECEDEDACCOUNT);
}
break;
case 99:
{
LoginGetDynamicPWQuery( (char*)pData->Data[8], dwConnectionIdx );
}
break;
default:
{
ASSERT(0);
}
}
}
//*/
BOOL LoginGetDynamicPWQuery( char* id, DWORD dwConnectionIndex )
{
char guery[128];
sprintf( guery, "EXEC %s \'%s\', '', 1", "lp_mat_out", id );
if(g_DB.LoginMiddleQuery( RLoginGetDynamicPWQuery, dwConnectionIndex, guery) == FALSE)
{
return FALSE;
}
return TRUE;
}
void RLoginGetDynamicPWQuery(LPMIDDLEQUERY pData, LPDBMESSAGE pMessage)
{
DWORD dwConnectionIdx = pMessage->dwID;
int rt = atoi((char*)pData->Data[0]);
if( rt == 1 )
{
//send mat msg
MSG_USE_DYNAMIC_ACK msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_USE_DYNAMIC_ACK;
SafeStrCpy( msg.mat, (char*)pData->Data[1], 32 );
g_Network.Send2User( dwConnectionIdx, (char*)&msg, sizeof(msg) );
}
else
{
//error msg
MSGBASE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_USE_DYNAMIC_NACK;
g_Network.Send2User( dwConnectionIdx, (char*)&msg, sizeof(msg) );
}
}
BOOL CheckDynamicPW( char* id, char* pw, char* ip, WORD ServerNo, DWORD AuthKey, DWORD dwConnectionIndex, DWORD dwMaxUser, WORD ServerNum )
{
char guery[128];
sprintf(guery, "EXEC up_gameloginmat_free \'%s\', \'%s\', \'%s\', %d, \'%d\', %d, %d, %d",
id, pw, ip, ServerNo, AuthKey, dwMaxUser, gUserMGR.GetLimitAge(), ServerNum );
if(g_DB.LoginQuery(eQueryType_FreeQuery, eCheckDynamicPW, dwConnectionIndex, guery, FALSE) == FALSE)
return FALSE;
return TRUE;
}
void RCheckDynamicPW( LPQUERY pData, LPDBMESSAGE pMessage )
{
DWORD stateNo = atoi((char*)pData->Data[0]);
WORD ServerNo = atoi((char*)pData->Data[1]);
DWORD UserIdx = atoi((char*)pData->Data[2]);
/////////////////////////////////////////////////////////
// °áÁ¦ °ü·Ã º¯¼ö (¾ÆÁ÷ »ç¿ë¾ÈÇÔ.)
// WORD Type = atoi((char*)pData->Data[3]); //°áÁ¦¹æ½Ä
// WORD time = atoi((char*)pData->Data[4]); //³²Àº½Ã°£??
// WORD bTen = atoi((char*)pData->Data[5]); //üÇèÆÇ¿©ºÎ
/////////////////////////////////////////////////////////
DWORD AuthKey = atoi((char*)pData->Data[6]);
BYTE UserLevel = atoi((char*)pData->Data[7]);
WORD AgentNo = atoi((char*)pData->Data[8]);
DWORD dwConnectionIdx = pMessage->dwID;
USERINFO* pUserInfo = g_pUserTable->FindUser(dwConnectionIdx);
if(pUserInfo == NULL) // ÀÌ¹Ì ³ª°£°æ¿ì
{
LoginCheckDelete(UserIdx);
return;
}
ASSERT(pUserInfo->dwConnectionIndex == dwConnectionIdx);
if(pUserInfo->dwUniqueConnectIdx != AuthKey) // ÀÌ¹Ì ³ª°¡°í ´Ù¸¥ ³ÑÀÌ µé¾î¿Â °æ¿ì
{
LoginCheckDelete(UserIdx);
return;
}
pUserInfo->dwUserID = UserIdx;
pUserInfo->UserLevel = UserLevel;
pUserInfo->State = stateNo;
g_Console.LOG(4, "ID/PW Check Received dwConnectionIdx:%d",dwConnectionIdx);
switch(stateNo)
{
case 1: // Á¢¼Ó ¼º°ø.
{
// À¯Àú·¹º§ °Ë»ç
if(gUserMGR.IsValidUserLevel(UserLevel) == FALSE)
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_INVALIDUSERLEVEL);
DisconnectUser(dwConnectionIdx);
LoginCheckDelete(UserIdx); // ¼öÁ¤¿ä!!!
return;
}
// g_Console.Log(eLogDisplay, 4, " ID/PW Success : dwConnectionIdx: %d",dwConnectionIdx);
if( UserLevel == eUSERLEVEL_GM )
{
char strIP[16] = {0,};
WORD wPort;
g_Network.GetUserAddress( dwConnectionIdx, strIP, &wPort );
IPCheckQuery( strIP, AuthKey, dwConnectionIdx );
}
else
{
SERVERINFO* pAgentServer = g_pServerTable->GetServer(AGENT_SERVER, AgentNo);
if(pAgentServer == NULL)
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_NOAGENTSERVER);
DisconnectUser(dwConnectionIdx);
LoginCheckDelete(UserIdx); //OnDisconnectUser¿¡¼ È£ÃâÇϴµ¥.. Ȥ½Ã³ªÇؼ.
return;
}
MSG_DWORD2BYTE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_NOTIFY_USERLOGIN_SYN;
msg.dwObjectID = UserIdx;
msg.dwData1 = AuthKey;
msg.dwData2 = dwConnectionIdx;
msg.bData = UserLevel;
g_Network.Send2Server(pAgentServer->dwConnectionIndex,(char*)&msg,sizeof(msg));
g_pLoginUser.Remove( pUserInfo->dwUserID );
}
}
break;
case 2: // ID¾øÀ½.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_WRONGIDPW);
}
break;
case 3: // ºñ¹Ð¹øÈ£¿À·ù.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_WRONGIDPW);
}
break;
case 4: // °ÔÀÓ¿¡ Á¢¼ÓÁß.
{
if(g_nServerSetNum == ServerNo)
{
MSG_DWORD msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_NOTIFY_OVERLAPPEDLOGIN;
msg.dwData = UserIdx;
g_Network.Broadcast2AgentServer((char*)&msg,sizeof(msg));
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_OVERLAPPEDLOGIN,0);
}
else
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_OVERLAPPEDLOGININOTHERSERVER,ServerNo);
}
}
break;
case 5: // ºí·°µÈ °èÁ¤. @state_num = 6ÀÌ¸é °èÁ¤ºí·° (À¥ °ü¸®¸ðµå¿¡¼ »ç¿ë)
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_BLOCKUSERLEVEL);
}
break;
case 7: // DB Connection Error
{
ASSERTMSG(0, "login check error ret 0");
}
break;
case 8: // ÀοøÃʰú
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_MAXUSER );
}
break;
case 14:
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_NOT_CLOSEBETAWINNER );
}
break;
case 15: //¼ºÀμ·¿¡ ¹Ì¼º³âÀÚ°¡ µé¾î¿À·Á°í Çß´Ù.
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_MINOR_INADULTSERVER );
}
break;
case 50: // ȸ¿øÅ»ÅðÇÑ °èÁ¤ÀÓ.
{
LoginError(dwConnectionIdx,AuthKey,LOGIN_ERROR_SECEDEDACCOUNT);
}
break;
default:
{
ASSERT(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -