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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,348 @@
#include "Nave.h"
#include "NFLog.h"
#include "NFLogManager.h"
#include "NFThreadManager.h"
namespace Nave {
NFLogThread::NFLogThread() : m_pLogHandle(NULL), m_bCompress(TRUE),
m_hFlush(CreateEvent(0, TRUE, FALSE, 0)),
m_hFile(INVALID_HANDLE_VALUE), m_dwTotalWritten(0),
m_dwMaxFileSize(MAX_FILE_SIZE)
{
InterlockedExchange(&m_bEnd, FALSE);
}
NFLogThread::~NFLogThread()
{
if(INVALID_HANDLE_VALUE != m_hFile)
{
CloseHandle(m_hFile);
m_hFile = INVALID_HANDLE_VALUE;
}
if(0 != m_hFlush)
{
CloseHandle(m_hFlush);
m_hFlush = 0;
}
}
VOID NFLogThread::Initialize(NFLogManager* pLog, BOOL bCompress)
{
m_bCompress = bCompress;
m_pLogHandle = pLog;
}
unsigned int NFLogThread::Run()
{
// <20><><EFBFBD>⼭ m_bEnd<6E><64> TRUE<55><45> <20>ƴϸ<C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><20>۵<EFBFBD><DBB5>ϰ<EFBFBD> <20>ִ<EFBFBD>.
for(;TRUE != InterlockedCompareExchange(&m_bEnd, TRUE, TRUE);)
{
// <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> 1<>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> Ȯ<><C8AE>.
if(WAIT_TIMEOUT == WaitForSingleObject(m_hFlush, 1000))
{
continue;
}
WriteLog();
};
WriteLog();
return 0;
}
BOOL NFLogThread::End()
{
InterlockedExchange(&m_bEnd, TRUE);
SetEvent(m_hFlush);
return TRUE;
}
BOOL NFLogThread::WriteLog()
{
// <20>α׿<CEB1><D7BF><EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
if(!m_pLogHandle)
return FALSE;
m_pLogHandle->SpliceInWriteBuffer(m_WriteBufferList);
if(m_WriteBufferList.empty())
return TRUE;
if(INVALID_HANDLE_VALUE == m_hFile)
{
SetLogFileName();
m_hFile = CreateFileW(m_szLogFileName, GENERIC_WRITE,
FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(INVALID_HANDLE_VALUE == m_hFile)
{
return FALSE;
}
}
unsigned long dwWritten = 0;
for(NFLogBuffer::List::iterator itr = m_WriteBufferList.begin();
itr != m_WriteBufferList.end(); ++itr)
{
NFLogBuffer* pLogBuffer = *itr;
if(FALSE == WriteFile(m_hFile, pLogBuffer->m_Buffer, pLogBuffer->m_dwUsage, &dwWritten, 0))
{
LOG_ERROR((L"<EFBFBD>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. ErrorNum : %d, FileHandle:0x%p, <20><><EFBFBD><EFBFBD> ũ<><C5A9>:%d",
GetLastError(), m_hFile, pLogBuffer->m_dwUsage));
}
m_dwTotalWritten += dwWritten;
}
m_pLogHandle->SpliceInFreeBuffer(m_WriteBufferList);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
if(m_dwTotalWritten > m_dwMaxFileSize)
{
if(INVALID_HANDLE_VALUE != m_hFile) { CloseHandle(m_hFile); m_hFile = INVALID_HANDLE_VALUE; } // <20><><EFBFBD><EFBFBD> <20>ݰ<EFBFBD>...
m_dwTotalWritten = 0;
}
return TRUE;
}
BOOL NFLogThread::SetLogFileName()
{
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
unsigned long dwSpinCount = 0;
WCHAR szProgramName[MAX_PATH];
WCHAR szLogFilePrefix[MAX_PATH];
// <20><><EFBFBD>α׷<CEB1><D7B7≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
Nave::GetProgramName(szProgramName, MAX_PATH);
if(m_pLogHandle)
_snwprintf(szLogFilePrefix, MAX_PATH - 1, L"%s", m_pLogHandle->GetLogFilePrefix());
else
wcsncpy(szLogFilePrefix, szProgramName, MAX_PATH);
if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(szProgramName))
{
if (!CreateDirectoryW(szProgramName, 0))
{
return FALSE;
}
}
while (TRUE)
{
int LogLen = _snwprintf(m_szLogFileName, MAX_PATH,
L"%s\\%s-%04d%02d%02d-%02d%02d%02d-%04d.log",
szProgramName, szLogFilePrefix, sysTime.wYear, sysTime.wMonth, sysTime.wDay,
sysTime.wHour, sysTime.wMinute, sysTime.wSecond, dwSpinCount);
if(LogLen <= 0)
{
LOG_ERROR((L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
return FALSE;
}
if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(m_szLogFileName))
{
break;
}
++dwSpinCount;
}
return TRUE;
}
NFLogManager::NFLogManager(void) : m_lpDetailBuffer(0)
{
}
NFLogManager::~NFLogManager(void)
{
Destroy();
}
BOOL NFLogManager::Initialize(BOOL bCompress, const WCHAR* szLogFilePrefix)
{
WCHAR strName[MAX_PATH];
Nave::GetProgramName(strName, MAX_PATH);
wcsncpy(m_szLogFilePrefix, strName, MAX_PATH);
if(szLogFilePrefix != 0)
{
wcscat(m_szLogFilePrefix, szLogFilePrefix);
}
// ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
for(int nCount = 0; nCount < DEFAULT_FREE_LOG_BUFFER_NUM; ++nCount)
{
NFLogBuffer* pDetailBuffer = new NFLogBuffer;
if(0 == pDetailBuffer)
{
LOG_ERROR((L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20>Ҵ<EFBFBD><D2B4>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"));
Destroy();
return FALSE;
}
m_FreeList.push_back(pDetailBuffer);
};
// <20><><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>켱 1<><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(m_lpDetailBuffer == 0)
{
m_lpDetailBuffer = GetBuffer();
}
m_LogSaveThread.Initialize(this, bCompress);
if(INVALID_HANDLE_VALUE == NFThreadManager::Run(&m_LogSaveThread))
{
LOG_ERROR((L"Flush<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"));
return FALSE;
}
return TRUE;
}
BOOL NFLogManager::Destroy()
{
Flush();
NFThreadManager::Stop(&m_LogSaveThread, INFINITE);
// <20><>ũ<EFBFBD>Ǵ<EFBFBD>.
NFSyncLock CL(&m_LogSync);
NFLogBuffer* pDetailBuffer;
for(NFLogBuffer::List::iterator itr = m_FreeList.begin(); itr != m_FreeList.end(); ++itr)
{
pDetailBuffer = (*itr);
_DELETE(pDetailBuffer);
}
m_FreeList.clear();
for(NFLogBuffer::List::iterator itr = m_WriteList.begin(); itr != m_WriteList.end(); ++itr)
{
pDetailBuffer = (*itr);
_DELETE(pDetailBuffer);
}
m_WriteList.clear();
return TRUE;
}
VOID NFLogManager::SetLogMaxSize(DWORD dwSize)
{
m_LogSaveThread.SetLogMaxSize(dwSize);
}
NFLogBuffer* NFLogManager::GetBuffer()
{
// <20><>ũ<EFBFBD>Ǵ<EFBFBD>.
NFSyncLock CL(&m_LogSync);
NFLogBuffer* pLogBuffer = 0;
if(m_FreeList.empty())
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǽð<C7BD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>. <20><>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
pLogBuffer = new NFLogBuffer;
}
else
{
pLogBuffer = m_FreeList.front();
m_FreeList.pop_front();
}
if(0 == pLogBuffer)
{
LOG_ERROR((L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
return 0;
}
pLogBuffer->Initialize();
return pLogBuffer;
};
BOOL NFLogManager::Flush()
{
// <20><><EFBFBD>۸<EFBFBD> <20>ִ´<D6B4>.
PushBuffer(&m_lpDetailBuffer);
return m_LogSaveThread.FlushSignal();
}
char* NFLogManager::ReserveBuffer(unsigned short usReserve)
{
NFSyncLock CL(&m_LogSync);
if(0 == m_lpDetailBuffer)
{
m_lpDetailBuffer = GetBuffer();
}
if(NFLogBuffer::MAX_LOG_BUFFER < m_lpDetailBuffer->m_dwUsage + usReserve)
{
Flush(); // <20><><EFBFBD>۰<EFBFBD> <20><>á<EFBFBD><C3A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD>.
m_lpDetailBuffer = GetBuffer();
}
if(0 == m_lpDetailBuffer)
{
LOG_ERROR((L"<EFBFBD>α<EFBFBD> <20><><EFBFBD>۰<EFBFBD> 0<>Դϴ<D4B4>."));
return 0;
}
// <20><><EFBFBD>ø<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>ش翵<D8B4><E7BFB5><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>Ѵ<EFBFBD>.
char* pPoint = &m_lpDetailBuffer->m_Buffer[m_lpDetailBuffer->m_dwUsage];
Complete(usReserve);
return pPoint;
}
VOID NFLogManager::SpliceInWriteBuffer(NFLogBuffer::List& logBufferList)
{
NFSyncLock CL(&m_LogSync);
if(m_WriteList.empty())
return;
// WriteBuffer <20><> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
logBufferList.splice(logBufferList.end(), m_WriteList);
}
VOID NFLogManager::SpliceInFreeBuffer(NFLogBuffer::List& logBufferList)
{
NFSyncLock CL(&m_LogSync);
if(logBufferList.empty())
return;
m_FreeList.splice(m_FreeList.end(), logBufferList);
}
VOID NFLogManager::PushBuffer(NFLogBuffer** ppDetailBuffer)
{
if(0 == *ppDetailBuffer) { return; }
NFSyncLock CL(&m_LogSync);
if(0 == (*ppDetailBuffer)->m_dwUsage)
{
// <20><><EFBFBD><EFBFBD><EFBFBD> 0<>̴<EFBFBD> <20>ٽ<EFBFBD> Free<65><65> <20><><EFBFBD><EFBFBD>.
m_FreeList.push_back(*ppDetailBuffer);
}
else
{
m_WriteList.push_back(*ppDetailBuffer);
}
// <20>̺κ<CCBA> <20><EFBFBD><EBB9AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*ppDetailBuffer = 0;
}
}