#include "stdAfx.h" #include "HanUnitedDisconnID.h" #include "SendAgentPacket.h" #include #include #include CHanUnitedDisconnectID& CHanUnitedDisconnectID::GetInstance() { static CHanUnitedDisconnectID hanUnitedDisconnectID; return hanUnitedDisconnectID; } CHanUnitedDisconnectID::CHanUnitedDisconnectID() { } CHanUnitedDisconnectID::~CHanUnitedDisconnectID() { } void CHanUnitedDisconnectID::UpdateDisconnectInfo(const DisconnectInfo& disconnectInfo) { DisconnectInfoMap::iterator pos = m_DisconnectInfoMap.find(disconnectInfo.m_nUID); if(pos == m_DisconnectInfoMap.end()) { m_DisconnectInfoMap.insert(DisconnectInfoMap::value_type( disconnectInfo.m_nUID, disconnectInfo)); } else { pos->second = disconnectInfo; } } bool CHanUnitedDisconnectID::RemoveDisconnectInfo(int nUID) { DisconnectInfoMap::iterator pos = m_DisconnectInfoMap.find(nUID); if(pos != m_DisconnectInfoMap.end()) { m_DisconnectInfoMap.erase(pos); return true; } return false; } CHanUnitedDisconnectID::DisconnectInfo* CHanUnitedDisconnectID::GetDisconnectInfo(int nUID) { DisconnectInfoMap::iterator pos = m_DisconnectInfoMap.find(nUID); if(pos != m_DisconnectInfoMap.end()) { return &pos->second; } return 0; } void CHanUnitedDisconnectID::CheckDisconnect() { #pragma pack(1) struct HanUnitedUserData { int m_nUID; // int m_nServerID; // int m_nRemainMin; // char m_cBillingType[2]; // E : °³ÀÎÁ¤·®, T : °³ÀÎÁ¤¾×, F : ¹«·á»ç¿ëÀÚ int m_nEndTime; // ¹«·á, Á¤¾× : 20030225, Á¤·® : RemainMin int m_nCRMIndex; // °³ÀÎÀº 0, PC¹æÀº 0ÀÌ»ó. º¸Åë °³Àθ¸ µé¾î¿Â´Ù. }; #pragma pack() const int MAX_DATA = CDBSingleObject::MaxRowNum; HanUnitedUserData hanUnitedUserData[MAX_DATA]; if(!DBComponent::BillingDB::USPCheckTimeoutUser(CDBSingleObject::GetInstance())) { ERRLOG1(g_Log, "°ú±Ý ¸¸·á À¯Àú¸¦ ¾ò¾î¿À´Â µ¥ ½ÇÆÐÇß½À´Ï´Ù. GetErrorString() :%s", CDBSingleObject::GetInstance().GetErrorString()); } else { int nRowNum = 0; while(CDBSingleObject::GetInstance().GetData( (void**)hanUnitedUserData, sizeof(HanUnitedUserData), MAX_DATA, &nRowNum)) { if(0 == nRowNum) { break; } // Å×ÀÌºí¿¡ UID°¡ µé¾î ÀÖ´ÂÁö »ìÇÉ´Ù. // 1. µé¾î ÀÖÁö ¾Ê´Ù. // ³²Àº ½Ã°£À» üũÇÑ ÈÄ, 0 < time <5 ÀÌ¸é °ú±Ý °æ°í ¸Þ½ÃÁö¸¦ º¸³»°í Å×ÀÌºí¿¡ »ðÀÔ. // 2. µé¾î ÀÖ´Ù. // ³²Àº ½Ã°£À» üũÇÑ ÈÄ, time <= 0 À̸é UserKillÀ» º¸³»°í Å×ÀÌºí¿¡¼­ Á¦°Å. // À¯Àú°¡ ·Î±×¾Æ¿ôÇϸé Å×ÀÌºí¿¡¼­ Á¦°ÅÇÑ´Ù. HanUnitedUserData* lpHanUnitedUserData = hanUnitedUserData; HanUnitedUserData* lpHanUnitedUserDataEnd = hanUnitedUserData + nRowNum; for(; lpHanUnitedUserData != lpHanUnitedUserDataEnd; ++lpHanUnitedUserData) { DisconnectInfo* lpDisconnectInfo = GetDisconnectInfo(lpHanUnitedUserData->m_nUID); if(0 == lpDisconnectInfo) { // ³²Àº ½Ã°£À» üũÇÑ ÈÄ, timeoutÀ» º¸³½´Ù. AgentSendPacket::SendHanBTN(lpHanUnitedUserData->m_nServerID, lpHanUnitedUserData->m_nUID, lpHanUnitedUserData->m_nRemainMin, lpHanUnitedUserData->m_cBillingType[0]); DETLOG5(g_Log, "UID:%u/ServerID:%u/cRemainMinute:%d/cBillingType:%c/EndTime:%d/À¯Àú¿¡°Ô °ú±Ý ¸¸·á °æ°í¸¦ º¸³Â½À´Ï´Ù.", lpHanUnitedUserData->m_nUID, lpHanUnitedUserData->m_nServerID, lpHanUnitedUserData->m_nRemainMin, lpHanUnitedUserData->m_cBillingType[0], lpHanUnitedUserData->m_nEndTime); DisconnectInfo disconnInfo; disconnInfo.m_nUID = lpHanUnitedUserData->m_nUID; disconnInfo.m_nServerID = lpHanUnitedUserData->m_nServerID; disconnInfo.m_nRemainMin = lpHanUnitedUserData->m_nRemainMin; disconnInfo.m_nEndTime = lpHanUnitedUserData->m_nEndTime; disconnInfo.m_nCRMIndex = lpHanUnitedUserData->m_nCRMIndex; disconnInfo.m_cBillingType = lpHanUnitedUserData->m_cBillingType[0]; UpdateDisconnectInfo(disconnInfo); } else { lpDisconnectInfo->m_nServerID = lpHanUnitedUserData->m_nServerID; lpDisconnectInfo->m_nRemainMin = lpHanUnitedUserData->m_nRemainMin; lpDisconnectInfo->m_nEndTime = lpHanUnitedUserData->m_nEndTime; lpDisconnectInfo->m_nCRMIndex = lpHanUnitedUserData->m_nCRMIndex; lpDisconnectInfo->m_cBillingType = lpHanUnitedUserData->m_cBillingType[0]; if(lpDisconnectInfo->m_nRemainMin <= 0) { AgentSendPacket::SendUserKill(lpDisconnectInfo->m_nServerID, lpDisconnectInfo->m_nUID); DETLOG5(g_Log, "UID:%u/ServerID:%u/cRemainMinute:%d/cBillingType:%c/EndTime:%d/°ú±ÝÀÌ ¸¸·áµÇ¾î À¯ÀúÀÇ Á¢¼ÓÀ» ²÷½À´Ï´Ù.", lpHanUnitedUserData->m_nUID, lpHanUnitedUserData->m_nServerID, lpHanUnitedUserData->m_nRemainMin, lpHanUnitedUserData->m_cBillingType[0], lpHanUnitedUserData->m_nEndTime); RemoveDisconnectInfo(lpDisconnectInfo->m_nUID); } } } } } }