#include "stdafx.h" #include "UserIDTable.h" #include "UIDAgentDispatch.h" #include "SendAgentPacket.h" #include #include #include #include #include #include // ÇѰÔÀÓ ±âÁ¸ ó¸® ·çƾ. DB°ü·Ã ½ÇÆÐ½Ã ¿¡·¯ ÁÖ´Â ºÎºÐ¸¸ »õ·Î »ðÀÔÇϰí, // ÄÚµå Á¤¸®¸¦ ÇÏ¿©¾ß ÇÑ´Ù. bool CUIDAgentDispatch::ProcessBillingHan(PktUUT* lpPktUUT) { unsigned char Cmd = lpPktUUT->m_cCmd; unsigned long ServerID = lpPktUUT->m_dwServerID; unsigned long SessionID = lpPktUUT->m_dwSessionID; unsigned long UserID = lpPktUUT->m_dwUserID; unsigned long CharID = lpPktUUT->m_dwCharID; char *AccountName = lpPktUUT->m_strAccount; IN_ADDR& IPAddress = lpPktUUT->m_IPAddress; // ÇѰÔÀÓ Ã³¸® ·çƾ switch(Cmd) { case PktUUT::UpdateUIDTableUserLogin: { CPerformanceInstrument userLogin("UserLogin"); CAutoInstrument autoInstrument(userLogin); // ŰÆÛ °ü·Ã ó¸® RE_USPCheckBilling_Login GetData = {0,}; char Check = CServerSetup::GetInstance().GetFreeCheck() ? 1 : 0; // ±âº»(=0), ¹«·á°èÁ¤(=1) if(!DBComponent::BillingDB::USPCheckBilling_Login(CDBSingleObject::GetInstance(), AccountName, UserID, Check, inet_ntoa(IPAddress), GetGroup(), &GetData)) { SERLOG6(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_Login È£Ãâ ½ÇÆÐ %s : %s", UserID, AccountName, ServerID, Cmd, inet_ntoa(IPAddress), CDBSingleObject::GetInstance().GetErrorString()); // DB Query½ÇÆÐ(Ŭ¶óÀÌ¾ðÆ®¿¡´Â ¿¡·¯ 1¹ø (¼­¹ö¿¡¼­ ¿¡·¯°¡ ³µ½À´Ï´Ù) ¹ß»ý AgentSendPacket::SendUpdateUIDTable(GetGroup(), Cmd, UserID, 4, 0, 0, 'N', 0, 0); return true; } // ¾÷µ¥ÀÌÆ® Ack if(FALSE == CServerSetup::GetInstance().GetIgnoreFlag()) { if(1 == GetData.Flag && PktUUT::DISCONNECT_USER == lpPktUUT->GetError()) { // À¯Àú°¡ ÀÌ¹Ì Á¢¼ÓÇØ ÀÖ°í, À¯Àú Á×À̱â Ç÷¡±×°¡ ¿À¸é, À¯Àú¸¦ Á×ÀδÙ. AgentSendPacket::SendHanUnitedUserKill(GetData.intCRMIndex1, AccountName, 0); } AgentSendPacket::SendUpdateUIDTable(GetGroup(), PktUUT::UpdateUIDTableUserLogin, UserID, GetData.Flag, GetData.PlayTime, GetData.intCRMIndex1, GetData.strBillingType[0], 0, lpPktUUT->GetError()); } else { if(1 == GetData.Flag && PktUUT::DISCONNECT_USER == lpPktUUT->GetError()) { // À¯Àú°¡ ÀÌ¹Ì Á¢¼ÓÇØ ÀÖ°í, À¯Àú Á×À̱â Ç÷¡±×°¡ ¿À¸é, À¯Àú¸¦ Á×ÀδÙ. AgentSendPacket::SendHanUnitedUserKill(GetData.intCRMIndex1, AccountName, 0); } // ¹«Á¶°Ç ¼º°ø½ÃŲ´Ù. ´Ü Áߺ¹·Î±×ÀÎÀÌ¸é ·Î±×ÀÎ ¸øÇϵµ·Ï ÇÑ´Ù. AgentSendPacket::SendUpdateUIDTable(GetGroup(), Cmd, UserID, (1 == GetData.Flag) ? 1 : 0, GetData.PlayTime, GetData.intCRMIndex1, GetData.strBillingType[0], 0, lpPktUUT->GetError()); } if(0 == GetData.Flag) { IncreaseSucceedNum(); } else { IncreaseFailNum(); } DETLOG7(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_Login È£Ãâ ¸®ÅÏ °ª Ãâ·Â. %u, %u [%s]", UserID, AccountName, ServerID, Cmd, GetData.Flag, GetData.intCRMIndex1, inet_ntoa(IPAddress)); IncreaseUnitNum(); } break; case PktUUT::UpdateUIDTableCharLogin: { CPerformanceInstrument charLogin("CharLogin"); CAutoInstrument autoInstrument(charLogin); // ŰÆÛ °ü·Ã ó¸® RE_USPCheckBilling_Login GetData = {0,}; char Check = CServerSetup::GetInstance().GetFreeCheck() ? 1 : 0; // ±âº»(=0), ¹«·á°èÁ¤(=1) if(!DBComponent::BillingDB::USPCheckBilling_CharIDLogin(CDBSingleObject::GetInstance(), AccountName, UserID, Check, inet_ntoa(IPAddress), GetGroup(), &GetData)) { SERLOG6(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_CharIDLogin È£Ãâ ½ÇÆÐ %s : %s", UserID, AccountName, ServerID, Cmd, inet_ntoa(IPAddress), CDBSingleObject::GetInstance().GetErrorString()); // DB Query½ÇÆÐ(Ŭ¶óÀÌ¾ðÆ®¿¡´Â ¿¡·¯ 1¹ø (¼­¹ö¿¡¼­ ¿¡·¯°¡ ³µ½À´Ï´Ù) ¹ß»ý AgentSendPacket::SendUpdateUIDTable(GetGroup(), Cmd, UserID, 4, 0, 0, 'N', 0, 0); return true; } // ¾÷µ¥ÀÌÆ® Ack if(FALSE == CServerSetup::GetInstance().GetIgnoreFlag()) { AgentSendPacket::SendUpdateUIDTable(GetGroup(), PktUUT::UpdateUIDTableCharLogin, UserID, GetData.Flag, GetData.PlayTime, GetData.intCRMIndex1, GetData.strBillingType[0], 0, 0); } else { AgentSendPacket::SendUpdateUIDTable(GetGroup(), PktUUT::UpdateUIDTableCharLogin, UserID, 0, GetData.PlayTime, GetData.intCRMIndex1, GetData.strBillingType[0], 0, 0); } if(0 == GetData.Flag) { IncreaseSucceedNum(); } else { IncreaseFailNum(); } DETLOG7(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_CharIDLogin È£Ãâ ¸®ÅÏ °ª Ãâ·Â. %u, %u [%s]", UserID, AccountName, ServerID, Cmd, GetData.Flag, GetData.intCRMIndex1, inet_ntoa(IPAddress)); IncreaseUnitNum(); } break; case PktUUT::UpdateUIDTableUserLogout: case PktUUT::UpdateUIDTableCharLogout: { CPerformanceInstrument logout("Logout"); CAutoInstrument autoInstrument(logout); // ŰÆÛ ó¸® unsigned long Return = 0; if(!DBComponent::BillingDB::USPCheckBilling_LogOut(CDBSingleObject::GetInstance(), AccountName, &Return)) { SERLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ½ÇÆÐ : %s", UserID, AccountName, ServerID, Cmd, CDBSingleObject::GetInstance().GetErrorString()); return true; } if(0 != Return) { SERLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ¸®ÅÏ ¿¡·¯. %u", UserID, AccountName, ServerID, Cmd, Return); return true; } DETLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ¸®ÅÏ °ª Ãâ·Â. %u", UserID, AccountName, ServerID, Cmd, Return); DecreaseUnitNum(); } break; case PktUUT::UpdateUIDTableUserMove: case PktUUT::UpdateUIDTableCharMove: { CPerformanceInstrument move("ZoneMove"); CAutoInstrument autoInstrument(move); // ŰÆÛ ó¸® unsigned long Return = 0; if(!DBComponent::BillingDB::USPCheckBilling_LogOut(CDBSingleObject::GetInstance(), AccountName, &Return)) { SERLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ½ÇÆÐ : %s", UserID, AccountName, ServerID, Cmd, CDBSingleObject::GetInstance().GetErrorString()); return true; } if(0 != Return) { SERLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ¸®ÅÏ ¿¡·¯. %u", UserID, AccountName, ServerID, Cmd, Return); return true; } DETLOG5(g_Log, "À¯Àú(%u) [%s] ¼­¹ö(0x%08x) ST:%d USPCheckBilling_LogOut È£Ãâ ¸®ÅÏ °ª Ãâ·Â. %u", UserID, AccountName, ServerID, Cmd, Return); DecreaseUnitNum(); } break; default: break; } return true; } bool CUIDAgentDispatch::ProcessDisconnectHan() { // ÇѰÔÀÓ ºô¸µÀ̳ª, ÇѰÔÀÓ ÅëÇÕºô¸µÀÎ °æ¿ì. unsigned long Result = 0; if(!DBComponent::BillingDB::USPDisConnectLogOut(CDBSingleObject::GetInstance(), m_Group, &Result)) { SERLOG3(g_Log, "%d ±×·ì ·Î±×¾Æ¿ô ½ÇÆÐ. °á°ú°ª:0x%08x DB¿¡·¯ ·Î±×:%s", m_Group, Result, CDBSingleObject::GetInstance().GetErrorString()); } else { SERLOG1(g_Log, "%d ±×·ì USPDisConnectLogOut È£Ãâ ¼º°ø", m_Group); if(!DBComponent::BillingDB::USPServer_End(CDBSingleObject::GetInstance(), m_Group, &Result)) { SERLOG3(g_Log, "%d ±×·ì ·Î±×¾Æ¿ô ½ÇÆÐ. °á°ú°ª:0x%08x DB¿¡·¯ ·Î±×:%s", m_Group, Result, CDBSingleObject::GetInstance().GetErrorString()); } else { SERLOG1(g_Log, "%d ±×·ì USEServer_End È£Ãâ ¼º°ø", m_Group); } } return true; }