📄 distributedbmsgparser.cpp
字号:
#include "stdafx.h"
#include "DistributeDBMsgParser.h"
#include "DataBase.h"
#include "CommonDBMsgParser.h"
#include "UserTable.h"
#include "ServerTable.h"
#include "Network.h"
#include "UserManager.h"
extern int g_nServerSetNum;
extern DWORD g_dwMaxUser;
DBMsgFunc g_DBMsgFunc[] =
{
NULL,
RLoginCheckQuery,
RIpCheckQuery, /// eIpCheckQuery (GM¾ÆÀÌÇÇ¿¡ ´ëÇÑ Ã¼Å©)
RLoginCheckQueryTest,
RCheckDynamicPW,
};
void LoginCheckInit()
{
g_DB.FreeQuery(0, 0, "EXEC %s", "MP_CHARACTER_LoginInit");
/* ¾ÆÁ÷ Ãß°¡ÇÏÁö ¸»°Í... ÇÁ·Î½ÃÁ® ¼öÁ¤ÈÄ Ãß°¡ (LBS)
char txt[128];
sprintf(txt, "EXEC %s %d", "up_Server_ResetLoginMember", g_nServerSetNum);
g_DB.LoginQuery(eQueryType_FreeQuery, 0, 0, txt);
*/
}
/*
void LoginCheckDelete(DWORD UserID)//, DWORD dwConnectionIndex)
{
char txt[128];
sprintf(txt, "EXEC %s %d", "Up_Member_CheckOut", UserID);
g_DB.LoginQuery(eQueryType_FreeQuery, eNull, 0, txt);
}
BOOL LoginCheckQuery(char* id, char* pw, DWORD AuthKey, DWORD dwConnectionIndex)
{
char guery[128];
// id,pw,AuthKey,ServerGroupNum
sprintf(guery, "EXEC %s \'%s\', \'%s\', %d, %d", "Up_Member_CheckIn", id, pw, AuthKey, 1);
if(g_DB.LoginQuery(eQueryType_FreeQuery, eLoginCheckQuery, dwConnectionIndex, guery) == FALSE)
{
g_Console.Log(eLogDisplay,4,"DB is Busy ID:%d ConnectionIndex:%d",id,dwConnectionIndex);
return FALSE;
}
g_Console.Log(eLogDisplay,4,"IDPW_QUERY ID: %s, ConnectionIndex: %d",id,dwConnectionIndex);
return TRUE;
}
*/
BOOL IPCheckQuery(char* ip, DWORD AuthKey, DWORD dwConnectionIndex)
{
char query[128];
sprintf(query, "EXEC %s \'%s\', %d", "Up_Ip_CheckIn", ip, AuthKey);
if(g_DB.LoginQuery(eQueryType_FreeQuery, eIpCheckQuery, dwConnectionIndex, query) == FALSE)
{
g_Console.Log(eLogDisplay,4,"DB is Busy(IP_CHECK) IP:%s ConnectionIndex:%d", ip, dwConnectionIndex);
return FALSE;
}
// g_Console.Log(eLogDisplay,4,"IP_QUERY IP: %s, ConnectionIndex: %d", ip, dwConnectionIndex);
return TRUE;
}
void LoginError(DWORD dwConnectionIdx, DWORD AuthKey,DWORD ErrorCode,DWORD dwParam)
{
MSG_DWORD2 msguser;
msguser.Category = MP_USERCONN;
msguser.Protocol = MP_USERCONN_LOGIN_NACK;
msguser.dwData1 = ErrorCode;
msguser.dwData2 = dwParam;
g_pUserTable->SendToUser(dwConnectionIdx, AuthKey, &msguser, sizeof(msguser) );
// g_Console.Log(eLogDisplay,4," LOGINERROR Errorcode: %d, ConnectionIndex: %d",ErrorCode,dwConnectionIdx);
}
void RIpCheckQuery(LPQUERY pData, LPDBMESSAGE pMessage)
{
if(pMessage->dwResult == 0)
{
// DB Error(DB is busy)
return;
}
WORD Ecode =atoi((char*)pData->Data[0]);
DWORD AuthKey = atoi((char*)pData->Data[1]);
DWORD dwConnectionIdx = pMessage->dwID;
USERINFO* pUserInfo = g_pUserTable->FindUser(dwConnectionIdx);
if( pUserInfo == NULL ) //ÀÌ¹Ì ³ª°¬´Ù.
return;
if( pUserInfo->dwUniqueConnectIdx != AuthKey ) // ÀÌ¹Ì ³ª°¡°í ´Ù¸¥ ³ÑÀÌ µé¾î¿Â °æ¿ì
return;
if( Ecode == 0 )
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_INVALID_IP );
LoginCheckDelete( pUserInfo->dwUserID );
//LoginCheckDelete( pUserInfo->dwUserID);
return;
}
// ¼º°ø
SERVERINFO* FastInfo = g_pServerTable->GetFastServer( AGENT_SERVER );
if(FastInfo == NULL)
{
LoginError( dwConnectionIdx, AuthKey, LOGIN_ERROR_NOAGENTSERVER );
LoginCheckDelete( pUserInfo->dwUserID );
pUserInfo->dwUserID = 0;
return;
}
MSG_DWORD2BYTE msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_NOTIFY_USERLOGIN_SYN;
msg.dwObjectID = pUserInfo->dwUserID;
msg.dwData1 = AuthKey;
msg.dwData2 = dwConnectionIdx;
msg.bData = pUserInfo->UserLevel;
g_Network.Send2Server(FastInfo->dwConnectionIndex,(char*)&msg,sizeof(msg));
}
DWORD testTime[1024];
BOOL LoginCheckQueryTest(char* id, char* pw, DWORD AuthKey, DWORD dwConnectionIndex)
{
char guery[128];
sprintf(guery, "EXEC %s \'%s\', \'%s\', %d, %d", "Up_Member_CheckIn", id, pw, AuthKey, 1);
if(g_DB.LoginQuery(101, eLoginCheckQueryTest, dwConnectionIndex, guery) == FALSE)
{
g_Console.Log(eLogDisplay,4,"DB is Busy ID:%d ConnectionIndex:%d",id,dwConnectionIndex);
return FALSE;
}
g_Console.Log(eLogDisplay,4,"IDPW_QUERY ID: %s, ConnectionIndex: %d",id,dwConnectionIndex);
return TRUE;
}
void RLoginCheckQueryTest(LPQUERY pData, LPDBMESSAGE pMessage)
{
DWORD AuthKey =atoi((char*)pData->Data[2]);
testTime[AuthKey-1] = GetTickCount() - pMessage->dwID;
g_Console.Log(eLogDisplay,4,"IDPW TestReceived ID: %d Time: %d",AuthKey,testTime[AuthKey-1]);
if(AuthKey == 1024)
{
FILE* fp = fopen("test.txt","w");
for(int n=0;n<1024;++n)
fprintf(fp,"%d ElapsedTime: %d\n",n+1,testTime[n]);
fclose(fp);
}
}
//* MemberDB ±³Ã¼ ÀÛ¾÷ 2004.03.22
void LoginCheckDelete(DWORD UserID)
{
char txt[128];
sprintf(txt, "EXEC %s %d", "Up_GameLogout", UserID);
g_DB.LoginQuery(eQueryType_FreeQuery, eNull, 0, txt);
}
//*/
//* MemberDB ±³Ã¼ ÀÛ¾÷ 2004.03.22
BOOL LoginCheckQuery(char* id, char* pw, char* ip, WORD ServerNo, DWORD AuthKey, DWORD dwConnectionIndex, DWORD dwMaxUser, WORD ServerNum)
{
char guery[128];
// id,pw,AuthKey,ServerGroupNum
// MaxUser°Ë»çÇÒ¶§
sprintf(guery, "EXEC %s \'%s\', \'%s\', \'%s\', %d, \'%d\', %d, %d, %d",
"up_gameloginadult_free", id, pw, ip, ServerNo, AuthKey, dwMaxUser, gUserMGR.GetLimitAge(), ServerNum);
if(g_DB.LoginQuery(eQueryType_FreeQuery, eLoginCheckQuery, dwConnectionIndex, guery, FALSE) == FALSE)
{
g_Console.Log(eLogDisplay,4,"DB is Busy ID:%d ConnectionIndex:%d",id,dwConnectionIndex);
LoginError( dwConnectionIndex, AuthKey, LOGIN_ERROR_DISTSERVERISBUSY );
return FALSE;
}
return TRUE;
}
//*/
//* MemberDB ±³Ã¼ ÀÛ¾÷ 2004.03.22
void RLoginCheckQuery(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->UserLevel == eUSERLEVEL_PROGRAMMER)
{
//////////////////////////////////////////////////////////////////////////
// testcode
FILE* fp = fopen("loginchk.txt","a");
fprintf(fp,"RLOGIN_Q %d\t%d\t%d\t%d\t%d\n",UserIdx,dwConnectionIdx,(DWORD)pUserInfo,pUserInfo->dwUniqueConnectIdx,AuthKey);
fclose(fp);
//////////////////////////////////////////////////////////////////////////
}
if(pUserInfo->dwUniqueConnectIdx != AuthKey) // ÀÌ¹Ì ³ª°¡°í ´Ù¸¥ ³ÑÀÌ µé¾î¿Â °æ¿ì
{
LoginCheckDelete(UserIdx);
return;
}
pUserInfo->dwUserID = UserIdx;
pUserInfo->UserLevel = UserLevel;
pUserInfo->State = stateNo;
// À̰÷¿¡¼ ¸¸¾à À߸øµÈ UserIdx°¡ ³Ñ¾î¿Â °æ¿ì
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -