#include "Stdafx.h" #include "Log.h" #include "DNFarm.h" #include "DNDivisionManager.h" #if defined( PRE_ADD_FARM_DOWNSCALE ) CDNFarm::CDNFarm( const TFarmItemFromDB& Farm ) { m_nFarmDBID = Farm.iFarmDBID; m_eFarmStatus = FARMSTATUS_NONE; m_nMapID = Farm.iFarmMapID; m_nCreateTick = timeGetTime(); m_nFarmMaxUser = 0; m_bStartFarm = Farm.bStartActivate; m_iAttr = Farm.iAttr; m_nManagedID = 0; ResetData(); } #elif defined( PRE_ADD_VIP_FARM ) CDNFarm::CDNFarm( const TFarmItemFromDB& Farm ) { m_nFarmDBID = Farm.iFarmDBID; m_eFarmStatus = FARMSTATUS_NONE; m_nMapID = Farm.iFarmMapID; m_nCreateTick = timeGetTime(); m_nFarmMaxUser = 0; m_bStartFarm = Farm.bStartActivate; m_Attr = Farm.Attr; m_nManagedID = 0; ResetData(); } #else CDNFarm::CDNFarm(UINT nFarmDBID, int nMapID, bool bStart) { m_nFarmDBID = nFarmDBID; m_eFarmStatus = FARMSTATUS_NONE; m_nMapID = nMapID; m_nCreateTick = timeGetTime(); m_nFarmMaxUser = 0; m_bStartFarm = bStart; ResetData(); } #endif // #if defined( PRE_ADD_FARM_DOWNSCALE ) CDNFarm::~CDNFarm() { m_vWaitingUser.clear(); } void CDNFarm::DestroyFarm() { if (m_eFarmStatus == FARMSTATUS_DESTROY) return; ResetData(); m_eFarmStatus = FARMSTATUS_DESTROY; } bool CDNFarm::SetAssignedServerID(int nGameServerID) { if (m_eFarmStatus != FARMSTATUS_NONE && m_eFarmStatus != FARMSTATUS_DESTROY) { g_Log.Log(LogType::_FARM, L"FarmID[%d] SetAssignedServerID Fail Reason[StateMisMatch]\n", GetFarmDBID()); return false; } m_nAssignedGameID = nGameServerID; m_eFarmStatus = FARMSTATUS_READY; return true; } bool CDNFarm::SetAssignedFarmData(int nGameServerID, int nGameThreadIdx, UINT nRoomID, int nMapID, int nFarmMaxUser) { //°ÔÀÓ¼­¹ö¿¡¼­ ·Îµå³¡³ª°í À¯Àú ¹ÞÀ» ¼ö ÀÖ´Ù°í Çϴ ŸÀ̹ÖÀÌ´Ù. if (m_eFarmStatus != FARMSTATUS_READY) { g_Log.Log(LogType::_FARM, L"FarmID[%d] SetAssignedFarmData Fail Reason[StateMisMatch]\n", GetFarmDBID()); return false; //¼¼ÆÃÀº ÃÖÃÊ Çѹø¸¸ °¡´ÉÇÏ´Ù ÀÌ·¸°Ô µ¥¸é À߸ø¸¸µç°ÅÀÓ! } if ((m_nAssignedGameID != nGameServerID) || m_nMapID != nMapID) { //À̰ǹ¹¾ß!!!!!!!!!!!!! g_Log.Log(LogType::_FARM, L"FarmID[%d] SetFarmDataLoaded Fail Reason[DataMisMatch]\n", GetFarmDBID()); return false; } m_nAssignedThreadIdx = nGameThreadIdx; m_nAssignedRoomID = nRoomID; m_nMapID = nMapID; m_nPlayTick = timeGetTime(); m_eFarmStatus = FARMSTATUS_PLAY; m_nFarmMaxUser = nFarmMaxUser; //Ç÷¹ÀÌ »óŰ¡µÇ¸é ´ë±âÁßÀÎ ³à¼®µéÀ» ¹Ð¾î ³Ö¾îÁØ´Ù. ProcessFarmWaiting(); return true; } void CDNFarm::SetFarmCurUserCount(int nFarmCurUserCount, bool bStarted, int nManagedID) { m_nFarmCurUser = nFarmCurUserCount; m_bStartFarm = bStarted; m_nManagedID = nManagedID; } bool CDNFarm::VerifyWaitAndPush(const VIMAReqGameID * pPacket) { if (m_eFarmStatus == FARMSTATUS_READY || m_eFarmStatus == FARMSTATUS_NONE) { std::vector ::iterator ii; for (ii = m_vWaitingUser.begin(); ii != m_vWaitingUser.end(); ii++) { if ((*ii).InstanceID == pPacket->InstanceID) { _DANGER_POINT(); //ÀÌ¹Ì ÀÖ´Ù! ÀÌ·³ ¾Èµ¥Áö! return false; } } VIMAReqGameID req; memcpy(&req, pPacket, sizeof(VIMAReqGameID)); m_vWaitingUser.push_back(req); //´ë±â À¯ÀúµéÀ» ¹Ð¾î ³Ö¾îÁÖÀÚ. return true; } return false; } bool CDNFarm::GetAssignedServerInfo(int &nGameServerID, int &nGameServerThreaIdx, UINT &nGameRoomID) { if (m_eFarmStatus == FARMSTATUS_NONE) //»ý¼º¸¸ µÇ¾îÁø »óÅ¿¡¼­´Â ·ëÁ¤º¸°¡ ¾ø´Ù. return false; nGameServerID = m_nAssignedGameID; nGameServerThreaIdx = m_nAssignedThreadIdx; nGameRoomID = m_nAssignedRoomID; return true; } void CDNFarm::ResetData() { m_nPlayTick = 0; m_nAssignedGameID = -1; m_nAssignedThreadIdx = -1; m_nAssignedRoomID = 0; m_nFarmCurUser = 0; m_vWaitingUser.clear(); } void CDNFarm::ProcessFarmWaiting() { //¹æÃʱ⠶Ǵ »ý¼ºµµÁß ÁøÀÔ¿äûÀÌ Àִ ģ±¸µéÀ» ¹Ð¾î ³Ö¾î ÁØ´Ù. ÀÏ´ÜÀº ±×³É ¹Ð¾î ³ÖÁö¸¸ ½ºÅ×ÀÌÆ® º¸È£¸¦ À§ÇØ //¸î°¡Áö ½ºÅ×ÀÌÆ® °Ë»ç¸¦ Ãß°¡Çؾ߰ڴÙ. std::vector ::iterator ii; for (ii = m_vWaitingUser.begin(); ii != m_vWaitingUser.end(); ii++) { if (g_pDivisionManager->RequestGameRoom(&(*ii)) == false) { //ÁøÀÔ½ÇÆÐ½Ã Ã³¸® } } m_vWaitingUser.clear(); }