Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
264
Server/RylServerProject/BaseLibrary/Utility/Time/Pulse/Pulse.cpp
Normal file
264
Server/RylServerProject/BaseLibrary/Utility/Time/Pulse/Pulse.cpp
Normal file
@@ -0,0 +1,264 @@
|
||||
#include "stdafx.h"
|
||||
#include "Pulse.h"
|
||||
|
||||
#include <mmsystem.h>
|
||||
#include <BaseLibrary/Log/ServerLog.h>
|
||||
|
||||
|
||||
CPulse& CPulse::GetInstance()
|
||||
{
|
||||
static CPulse Pulse;
|
||||
return Pulse;
|
||||
}
|
||||
|
||||
|
||||
CPulse::CPulse()
|
||||
: m_dwPulse(0),
|
||||
m_dwLastTick(timeGetTime()),
|
||||
m_dwHeavyTrafficCount(0),
|
||||
m_bTPPOverTwoTime(FALSE),
|
||||
m_nTicksPerPulse(0),
|
||||
m_nTicksPerSec(0)
|
||||
{
|
||||
SetTicksPerPulse(DEFAULT_TICKS_PER_PULSE);
|
||||
}
|
||||
|
||||
CPulse::~CPulse()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
void CPulse::SetTicksPerPulse(long nTicksPerPulse)
|
||||
{
|
||||
if(nTicksPerPulse <= 0)
|
||||
{
|
||||
nTicksPerPulse = DEFAULT_TICKS_PER_PULSE;
|
||||
}
|
||||
|
||||
m_nTicksPerPulse = nTicksPerPulse;
|
||||
m_nTicksPerSec = 1000 / nTicksPerPulse;
|
||||
}
|
||||
|
||||
unsigned long CPulse::GetRemainTime() const
|
||||
{
|
||||
long nElapsed = timeGetTime() - m_dwLastTick;
|
||||
|
||||
if (nElapsed < m_nTicksPerPulse)
|
||||
{
|
||||
return (m_nTicksPerPulse - nElapsed);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned long CPulse::CheckSleep()
|
||||
{
|
||||
long nElapsed = timeGetTime() - m_dwLastTick;
|
||||
|
||||
if (nElapsed < m_nTicksPerPulse)
|
||||
{
|
||||
// <20>帥<EFBFBD>ð<EFBFBD><C3B0><EFBFBD> TPP<50><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Sleep
|
||||
unsigned long dwSleep = (m_nTicksPerPulse - nElapsed) - 1;
|
||||
unsigned long dwTicksPerPulse = m_nTicksPerPulse;
|
||||
|
||||
if(m_nTicksPerPulse < 0)
|
||||
{
|
||||
dwTicksPerPulse = 0;
|
||||
}
|
||||
|
||||
if(dwTicksPerPulse < dwSleep)
|
||||
{
|
||||
dwSleep = 0;
|
||||
}
|
||||
|
||||
Sleep(dwSleep);
|
||||
|
||||
m_dwHeavyTrafficCount = 0;
|
||||
m_bTPPOverTwoTime = FALSE;
|
||||
}
|
||||
else if(((++m_dwHeavyTrafficCount) > 5) || (nElapsed > (m_nTicksPerPulse * 2)))
|
||||
{
|
||||
// <20>帥 <20>ð<EFBFBD><C3B0><EFBFBD> TPP<50><50> <20>ι躸<CEB9><E8BAB8> ū <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DETLOG3(g_Log, "Time Overflow : Elapsed time is %u, (TPP is %d), HeavyTrafficCount is %u"
|
||||
, nElapsed, m_nTicksPerPulse, m_dwHeavyTrafficCount);
|
||||
|
||||
m_bTPPOverTwoTime = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
DETLOG1(g_Log, "Traffic is %u", m_dwHeavyTrafficCount);
|
||||
m_bTPPOverTwoTime = FALSE;
|
||||
}
|
||||
|
||||
m_dwLastTick = timeGetTime();
|
||||
|
||||
++m_dwPulse;
|
||||
|
||||
if(0 == m_dwPulse)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20>ٽ<EFBFBD> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD>ƿԴٸ<D4B4>,
|
||||
// <20>ѹ<EFBFBD> <20><> <20><><EFBFBD>ؼ<EFBFBD> 0<><30> <20><> <20><> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
++m_dwPulse;
|
||||
}
|
||||
|
||||
return m_dwPulse;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
#include "../stdafx.h"
|
||||
#include "Pulse.h"
|
||||
|
||||
|
||||
#define DEFAULT_TPP 100
|
||||
|
||||
|
||||
CPulse g_Pulse;
|
||||
|
||||
|
||||
// constructor and destructor
|
||||
CPulse::CPulse() : m_dwPulse(0), m_dwExtraTick(GetTickCount()), m_dwLastTick(GetTickCount()), m_dwHeavyTrafficCount(0), m_TPPOverTwoTime(false)
|
||||
//, m_SleepOperation(NULL)
|
||||
{
|
||||
SetTicksPerPulse(DEFAULT_TPP);
|
||||
|
||||
for (int i=0; i<PULSETABLE_NUM; ++i)
|
||||
::ZeroMemory(&m_PulseTable[i], sizeof(PULSE_TIMER));
|
||||
|
||||
DETLOG1(g_Log, "this:0x%08x.", this);
|
||||
}
|
||||
|
||||
CPulse::~CPulse()
|
||||
{
|
||||
DETLOG1(g_Log, "this:0x%08x.", this);
|
||||
}
|
||||
|
||||
void CPulse::SetTicksPerPulse(unsigned long dwTicksPerPulse)
|
||||
{
|
||||
m_nTicksPerPulse = dwTicksPerPulse;
|
||||
}
|
||||
|
||||
//void CPulse::SetSleepOperation(Operation pOperation)
|
||||
//{
|
||||
// m_SleepOperation = pOperation;
|
||||
//}
|
||||
|
||||
unsigned long CPulse::CheckSleep(void)
|
||||
{
|
||||
m_dwExtraTick = GetTickCount();
|
||||
unsigned long nElapsed = m_dwExtraTick - m_dwLastTick;
|
||||
|
||||
if (nElapsed <= m_nTicksPerPulse) {
|
||||
// <20>帥<EFBFBD>ð<EFBFBD><C3B0><EFBFBD> TPP<50><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Sleep
|
||||
if (nElapsed < m_nTicksPerPulse) {
|
||||
//if (m_SleepOperation) {
|
||||
// // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۷<EFBFBD><DBB7>̼<EFBFBD><CCBC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// m_SleepOperation();
|
||||
|
||||
// // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> Ȯ<><C8AE><EFBFBD>ؼ<EFBFBD> TPP<50><50><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> Sleep
|
||||
// m_dwExtraTick = GetTickCount();
|
||||
// nElapsed = m_dwExtraTick - m_dwLastTick;
|
||||
// if (nElapsed < m_nTicksPerPulse) {
|
||||
// Sleep((m_nTicksPerPulse - nElapsed) - 1);
|
||||
// }
|
||||
|
||||
//} else {
|
||||
Sleep((m_nTicksPerPulse - nElapsed) - 1);
|
||||
//}
|
||||
}
|
||||
m_dwLastTick = GetTickCount();
|
||||
m_dwHeavyTrafficCount = 0;
|
||||
|
||||
m_TPPOverTwoTime = false;
|
||||
|
||||
} else if(((++m_dwHeavyTrafficCount) > 5) || (nElapsed > (m_nTicksPerPulse * 2))) {
|
||||
// <20>帥 <20>ð<EFBFBD><C3B0><EFBFBD> TPP<50><50> <20>ι躸<CEB9><E8BAB8> ū <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DETLOG2(g_Log, "Time Overflow : <20>帥 <20>ð<EFBFBD><C3B0><EFBFBD> %d <20><> TPP <20><> <20>ι躸<CEB9><E8BAB8> ũ<>ų<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20>Դϴ<D4B4>.", nElapsed, m_dwHeavyTrafficCount);
|
||||
m_dwLastTick = GetTickCount();
|
||||
|
||||
m_TPPOverTwoTime = true;
|
||||
} else {
|
||||
DETLOG1(g_Log, "Ʈ<><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20>Դϴ<D4B4>.", m_dwHeavyTrafficCount);
|
||||
// m_nTicksPerPulse < nElapsed <= m_nTicksPerPulse * 2
|
||||
m_dwLastTick = GetTickCount() - (nElapsed - m_nTicksPerPulse);
|
||||
|
||||
m_TPPOverTwoTime = false;
|
||||
}
|
||||
|
||||
return ++m_dwPulse;
|
||||
}
|
||||
|
||||
bool CPulse::InstallTimer(int nOperation, unsigned long dwPulse, Operation pOperation)
|
||||
{
|
||||
if (nOperation <= 0 || nOperation >= PULSETABLE_NUM) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i=0; i < PULSETABLE_NUM; ++i) {
|
||||
if (0 == m_PulseTable[i].m_nOperation) {
|
||||
m_PulseTable[i].m_nOperation = nOperation;
|
||||
m_PulseTable[i].m_dwPulse = dwPulse;
|
||||
m_PulseTable[i].m_pOperation = pOperation;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO : <20><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CPulse::UninstallTimer(int nOperation)
|
||||
{
|
||||
if(nOperation <= 0 || nOperation >= PULSETABLE_NUM)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i=0; i<PULSETABLE_NUM; ++i) {
|
||||
if (nOperation == m_PulseTable[i].m_nOperation) {
|
||||
m_PulseTable[i].m_nOperation = 0;
|
||||
m_PulseTable[i].m_dwPulse = 0;
|
||||
m_PulseTable[i].m_pOperation = NULL;
|
||||
|
||||
// TODO : <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> shift up
|
||||
ShiftupTable(i + 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO : <20><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD>
|
||||
return false;
|
||||
}
|
||||
|
||||
void CPulse::Operate(void)
|
||||
{
|
||||
int i = 0;
|
||||
while (m_PulseTable[i].m_nOperation) {
|
||||
if (0 == (GetCurrentPulse() % m_PulseTable[i].m_dwPulse)) {
|
||||
if (m_PulseTable[i].m_nOperation) {
|
||||
m_PulseTable[i].m_pOperation();
|
||||
}
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
void CPulse::ShiftupTable(int nStartIndex)
|
||||
{
|
||||
for (int i=nStartIndex; i<(PULSETABLE_NUM - 1); ++i) {
|
||||
// TODO : <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> shift up
|
||||
m_PulseTable[i].m_nOperation = m_PulseTable[i+1].m_nOperation;
|
||||
m_PulseTable[i].m_dwPulse = m_PulseTable[i+1].m_dwPulse;
|
||||
m_PulseTable[i].m_pOperation = m_PulseTable[i+1].m_pOperation;
|
||||
}
|
||||
|
||||
m_PulseTable[PULSETABLE_NUM].m_nOperation = 0;
|
||||
m_PulseTable[PULSETABLE_NUM].m_dwPulse = 0;
|
||||
m_PulseTable[PULSETABLE_NUM].m_pOperation = NULL;
|
||||
}
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,53 @@
|
||||
#ifndef _RYL_BASE_LIBRARY_PULSE_H_
|
||||
#define _RYL_BASE_LIBRARY_PULSE_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
// Single Thread<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
class CPulse
|
||||
{
|
||||
public:
|
||||
|
||||
enum PulseConst
|
||||
{
|
||||
DEFAULT_TICKS_PER_PULSE = 100
|
||||
};
|
||||
|
||||
static CPulse& GetInstance();
|
||||
|
||||
unsigned long CheckSleep();
|
||||
|
||||
void SetTicksPerPulse(long nTicksPerPulse);
|
||||
|
||||
long GetTicksPerPulse() const { return m_nTicksPerPulse; }
|
||||
long GetTicksPerSec() const { return m_nTicksPerSec; }
|
||||
|
||||
unsigned long GetRemainTime() const;
|
||||
|
||||
BOOL GetTPPOverTwoTime() const { return m_bTPPOverTwoTime; }
|
||||
unsigned long GetCurrentPulse() const { return m_dwPulse; }
|
||||
unsigned long GetLastTick() const { return m_dwLastTick; }
|
||||
|
||||
inline bool ProcessBySecond(unsigned long dwCycleSec) const { return (0 == (m_dwPulse % (dwCycleSec * m_nTicksPerSec))); }
|
||||
inline bool ProcessByMinute(unsigned long dwCycleMin) const { return ProcessBySecond(dwCycleMin * 60); }
|
||||
inline bool ProcessByHour(unsigned long dwCycleHour) const { return ProcessBySecond(dwCycleHour * 3600); }
|
||||
|
||||
private:
|
||||
|
||||
CPulse();
|
||||
~CPulse();
|
||||
|
||||
unsigned long m_dwPulse;
|
||||
unsigned long m_dwLastTick;
|
||||
unsigned long m_dwHeavyTrafficCount;
|
||||
|
||||
long m_nTicksPerPulse;
|
||||
long m_nTicksPerSec;
|
||||
|
||||
BOOL m_bTPPOverTwoTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user