2024-12-21 10:04:04 +08:00
|
|
|
|
|
|
|
|
|
|
#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)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε峡<CEB5><E5B3A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִٰ<D6B4> <20>ϴ<EFBFBD> Ÿ<>̹<EFBFBD><CCB9>̴<EFBFBD>.
|
|
|
|
|
|
if (m_eFarmStatus != FARMSTATUS_READY)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_Log.Log(LogType::_FARM, L"FarmID[%d] SetAssignedFarmData Fail Reason[StateMisMatch]\n", GetFarmDBID());
|
|
|
|
|
|
return false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ((m_nAssignedGameID != nGameServerID) || m_nMapID != nMapID)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F>̰ǹ<CCB0><C7B9><EFBFBD>!!!!!!!!!!!!!
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD>°<EFBFBD><C2B0>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>༮<EFBFBD><E0BCAE><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>־<EFBFBD><D6BE>ش<EFBFBD>.
|
|
|
|
|
|
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 <VIMAReqGameID>::iterator ii;
|
|
|
|
|
|
for (ii = m_vWaitingUser.begin(); ii != m_vWaitingUser.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*ii).InstanceID == pPacket->InstanceID)
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT(); //<2F>̹<EFBFBD> <20>ִ<EFBFBD>! <20>̷<EFBFBD> <20>ȵ<EFBFBD><C8B5><EFBFBD>!
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
VIMAReqGameID req;
|
|
|
|
|
|
memcpy(&req, pPacket, sizeof(VIMAReqGameID));
|
|
|
|
|
|
|
|
|
|
|
|
m_vWaitingUser.push_back(req); //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNFarm::GetAssignedServerInfo(int &nGameServerID, int &nGameServerThreaIdx, UINT &nGameRoomID)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_eFarmStatus == FARMSTATUS_NONE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD>ʱ<EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Կ<EFBFBD>û<EFBFBD><C3BB> <20>ִ<EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>. <20>ϴ<EFBFBD><CFB4><EFBFBD> <20>׳<EFBFBD> <20>о<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>˻縦 <20>߰<EFBFBD><DFB0>ؾ߰ڴ<DFB0>.
|
|
|
|
|
|
std::vector <VIMAReqGameID>::iterator ii;
|
|
|
|
|
|
for (ii = m_vWaitingUser.begin(); ii != m_vWaitingUser.end(); ii++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (g_pDivisionManager->RequestGameRoom(&(*ii)) == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD>Խ<EFBFBD><D4BD>н<EFBFBD> ó<><C3B3>
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
m_vWaitingUser.clear();
|
|
|
|
|
|
}
|
|
|
|
|
|
|