forked from metin2/client
182 lines
3.1 KiB
C++
182 lines
3.1 KiB
C++
|
#include "StdAfx.h"
|
|||
|
#include "../eterPack/EterPackManager.h"
|
|||
|
#include "../eterBase/CRC32.h"
|
|||
|
#include "../eterBase/Timer.h"
|
|||
|
|
|||
|
#include "Resource.h"
|
|||
|
#include "ResourceManager.h"
|
|||
|
|
|||
|
bool CResource::ms_bDeleteImmediately = false;
|
|||
|
|
|||
|
CResource::CResource(const char* c_szFileName) : me_state(STATE_EMPTY)
|
|||
|
{
|
|||
|
SetFileName(c_szFileName);
|
|||
|
}
|
|||
|
|
|||
|
CResource::~CResource()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
void CResource::SetDeleteImmediately(bool isSet)
|
|||
|
{
|
|||
|
ms_bDeleteImmediately = isSet;
|
|||
|
}
|
|||
|
|
|||
|
void CResource::OnConstruct()
|
|||
|
{
|
|||
|
Load();
|
|||
|
}
|
|||
|
|
|||
|
void CResource::OnSelfDestruct()
|
|||
|
{
|
|||
|
if (ms_bDeleteImmediately)
|
|||
|
Clear();
|
|||
|
else
|
|||
|
CResourceManager::Instance().ReserveDeletingResource(this);
|
|||
|
}
|
|||
|
|
|||
|
void CResource::Load()
|
|||
|
{
|
|||
|
if (me_state != STATE_EMPTY)
|
|||
|
return;
|
|||
|
|
|||
|
const char * c_szFileName = GetFileName();
|
|||
|
|
|||
|
DWORD dwStart = ELTimer_GetMSec();
|
|||
|
CMappedFile file;
|
|||
|
LPCVOID fileData;
|
|||
|
|
|||
|
//Tracenf("Load %s", c_szFileName);
|
|||
|
|
|||
|
if (CEterPackManager::Instance().Get(file, c_szFileName, &fileData))
|
|||
|
{
|
|||
|
m_dwLoadCostMiliiSecond = ELTimer_GetMSec() - dwStart;
|
|||
|
//Tracef("CResource::Load %s (%d bytes) in %d ms\n", c_szFileName, file.Size(), m_dwLoadCostMiliiSecond);
|
|||
|
|
|||
|
if (OnLoad(file.Size(), fileData))
|
|||
|
{
|
|||
|
me_state = STATE_EXIST;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Tracef("CResource::Load Error %s\n", c_szFileName);
|
|||
|
me_state = STATE_ERROR;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (OnLoad(0, NULL))
|
|||
|
me_state = STATE_EXIST;
|
|||
|
else
|
|||
|
{
|
|||
|
Tracef("CResource::Load file not exist %s\n", c_szFileName);
|
|||
|
me_state = STATE_ERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CResource::Reload()
|
|||
|
{
|
|||
|
Clear();
|
|||
|
Tracef("CResource::Reload %s\n", GetFileName());
|
|||
|
|
|||
|
CMappedFile file;
|
|||
|
LPCVOID fileData;
|
|||
|
|
|||
|
if (CEterPackManager::Instance().Get(file, GetFileName(), &fileData))
|
|||
|
{
|
|||
|
if (OnLoad(file.Size(), fileData))
|
|||
|
{
|
|||
|
me_state = STATE_EXIST;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
me_state = STATE_ERROR;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (OnLoad(0, NULL))
|
|||
|
me_state = STATE_EXIST;
|
|||
|
else
|
|||
|
{
|
|||
|
me_state = STATE_ERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
CResource::TType CResource::StringToType(const char* c_szType)
|
|||
|
{
|
|||
|
return GetCRC32(c_szType, strlen(c_szType));
|
|||
|
}
|
|||
|
|
|||
|
int CResource::ConvertPathName(const char * c_szPathName, char * pszRetPathName, int retLen)
|
|||
|
{
|
|||
|
const char * pc;
|
|||
|
int len = 0;
|
|||
|
|
|||
|
for (pc = c_szPathName; *pc && len < retLen; ++pc, ++len)
|
|||
|
{
|
|||
|
if (*pc == '/')
|
|||
|
*(pszRetPathName++) = '\\';
|
|||
|
else
|
|||
|
*(pszRetPathName++) = (char) korean_tolower(*pc);
|
|||
|
}
|
|||
|
|
|||
|
*pszRetPathName = '\0';
|
|||
|
return len;
|
|||
|
}
|
|||
|
|
|||
|
void CResource::SetFileName(const char* c_szFileName)
|
|||
|
{
|
|||
|
// 2004. 2. 1. myevan. <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD> static <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ°<CAB4><C2B0><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
// 2004. 2. 1. myevan. <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> std::string <20><><EFBFBD><EFBFBD>
|
|||
|
m_stFileName=c_szFileName;
|
|||
|
}
|
|||
|
|
|||
|
void CResource::Clear()
|
|||
|
{
|
|||
|
OnClear();
|
|||
|
me_state = STATE_EMPTY;
|
|||
|
}
|
|||
|
|
|||
|
bool CResource::IsType(TType type)
|
|||
|
{
|
|||
|
return OnIsType(type);
|
|||
|
}
|
|||
|
|
|||
|
CResource::TType CResource::Type()
|
|||
|
{
|
|||
|
static TType s_type = StringToType("CResource");
|
|||
|
return s_type;
|
|||
|
}
|
|||
|
|
|||
|
bool CResource::OnIsType(TType type)
|
|||
|
{
|
|||
|
if (CResource::Type() == type)
|
|||
|
return true;
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
bool CResource::IsData() const
|
|||
|
{
|
|||
|
return me_state != STATE_EMPTY;
|
|||
|
}
|
|||
|
|
|||
|
bool CResource::IsEmpty() const
|
|||
|
{
|
|||
|
return OnIsEmpty();
|
|||
|
}
|
|||
|
|
|||
|
bool CResource::CreateDeviceObjects()
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
void CResource::DestroyDeviceObjects()
|
|||
|
{
|
|||
|
}
|