forked from metin2/server
Refactored directory structure, added game files from TMP
This commit is contained in:
69
src/common/cache.h
Normal file
69
src/common/cache.h
Normal file
@ -0,0 +1,69 @@
|
||||
#ifndef __INC_COMMON_CACHE_H__
|
||||
#define __INC_COMMON_CACHE_H__
|
||||
|
||||
template <typename T> class cache
|
||||
{
|
||||
public:
|
||||
cache()
|
||||
: m_bNeedQuery(false), m_expireTime(600), m_lastUpdateTime(0)
|
||||
{
|
||||
m_lastFlushTime = time(0);
|
||||
|
||||
memset( &m_data, 0, sizeof(m_data) );
|
||||
}
|
||||
|
||||
T * Get(bool bUpdateTime = true)
|
||||
{
|
||||
if (bUpdateTime)
|
||||
m_lastUpdateTime = time(0);
|
||||
|
||||
return &m_data;
|
||||
}
|
||||
|
||||
void Put(T * pNew, bool bSkipQuery = false)
|
||||
{
|
||||
memcpy(&m_data, pNew, sizeof(T));
|
||||
m_lastUpdateTime = time(0);
|
||||
|
||||
if (!bSkipQuery)
|
||||
m_bNeedQuery = true;
|
||||
}
|
||||
|
||||
bool CheckFlushTimeout()
|
||||
{
|
||||
if (m_bNeedQuery && time(0) - m_lastFlushTime > m_expireTime)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CheckTimeout()
|
||||
{
|
||||
if (time(0) - m_lastUpdateTime > m_expireTime)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Flush()
|
||||
{
|
||||
if (!m_bNeedQuery)
|
||||
return;
|
||||
|
||||
OnFlush();
|
||||
m_bNeedQuery = false;
|
||||
m_lastFlushTime = time(0);
|
||||
}
|
||||
|
||||
virtual void OnFlush() = 0;
|
||||
|
||||
|
||||
protected:
|
||||
T m_data;
|
||||
bool m_bNeedQuery;
|
||||
time_t m_expireTime;
|
||||
time_t m_lastUpdateTime;
|
||||
time_t m_lastFlushTime;
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user