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

📄 distributedbmsgparser.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				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 + -