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:
192
Server/RylServerProject/BaseLibrary/Utility/File/MappedFile.cpp
Normal file
192
Server/RylServerProject/BaseLibrary/Utility/File/MappedFile.cpp
Normal file
@@ -0,0 +1,192 @@
|
||||
#include "stdafx.h"
|
||||
#include "MappedFile.h"
|
||||
|
||||
|
||||
CMemoryMappedFile::CMemoryMappedFile()
|
||||
: m_hFile(INVALID_HANDLE_VALUE), m_hMap(0)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
CMemoryMappedFile::~CMemoryMappedFile()
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
|
||||
bool CMemoryMappedFile::OpenFile(const char* szFileName, OpenMode eOpenMode)
|
||||
{
|
||||
DWORD dwOpenMode = 0;
|
||||
DWORD dwShareMode = 0;
|
||||
DWORD dwProtect = 0;
|
||||
|
||||
switch(eOpenMode)
|
||||
{
|
||||
case READ:
|
||||
dwOpenMode = GENERIC_READ;
|
||||
dwShareMode = FILE_SHARE_READ;
|
||||
dwProtect = PAGE_READONLY;
|
||||
m_dwFileViewMode = FILE_MAP_READ;
|
||||
break;
|
||||
|
||||
case READ_WRITE:
|
||||
dwOpenMode = GENERIC_READ | GENERIC_WRITE;
|
||||
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
|
||||
dwProtect = PAGE_READWRITE;
|
||||
m_dwFileViewMode = FILE_MAP_WRITE;
|
||||
break;
|
||||
};
|
||||
|
||||
Close();
|
||||
|
||||
m_hFile = CreateFile(szFileName, dwOpenMode,
|
||||
dwShareMode, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
|
||||
if(INVALID_HANDLE_VALUE != m_hFile)
|
||||
{
|
||||
m_hMap = CreateFileMapping(m_hFile, 0, dwProtect, 0, 0, 0);
|
||||
if(NULL != m_hMap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseHandle(m_hFile);
|
||||
m_hFile = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><DEB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰų<CFB0> <20><><EFBFBD><EFBFBD>.
|
||||
bool CMemoryMappedFile::CreateSharedMemory(DWORD dwLowSize, DWORD dwHighSize, const char* szFileName)
|
||||
{
|
||||
Close();
|
||||
|
||||
m_hMap = CreateFileMapping(INVALID_HANDLE_VALUE, 0,
|
||||
PAGE_READWRITE, dwHighSize, dwLowSize, szFileName);
|
||||
|
||||
return (0 != m_hMap);
|
||||
}
|
||||
|
||||
bool CMemoryMappedFile::OpenSharedMemory(const char* szFileName, OpenMode eOpenMode)
|
||||
{
|
||||
Close();
|
||||
|
||||
switch(eOpenMode)
|
||||
{
|
||||
case READ:
|
||||
m_dwFileViewMode = FILE_MAP_READ;
|
||||
break;
|
||||
|
||||
case READ_WRITE:
|
||||
m_dwFileViewMode = FILE_MAP_WRITE;
|
||||
break;
|
||||
};
|
||||
|
||||
m_hMap = OpenFileMapping(m_dwFileViewMode, FALSE, szFileName);
|
||||
|
||||
return (0 != m_hMap);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CMemoryMappedFile::Close()
|
||||
{
|
||||
if(0 != m_hMap)
|
||||
{
|
||||
CloseHandle(m_hMap);
|
||||
m_hMap = 0;
|
||||
}
|
||||
|
||||
if(INVALID_HANDLE_VALUE != m_hFile)
|
||||
{
|
||||
CloseHandle(m_hFile);
|
||||
m_hFile = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
bool CMemoryMappedFile::IsOpen()
|
||||
{
|
||||
return (0 != m_hMap);
|
||||
}
|
||||
|
||||
|
||||
void* CMemoryMappedFile::GetFileView(DWORD dwLowPosition,
|
||||
DWORD dwHighPosition,
|
||||
DWORD dwMappingSize)
|
||||
{
|
||||
return MapViewOfFileEx(m_hMap, m_dwFileViewMode,
|
||||
dwHighPosition, dwLowPosition, dwMappingSize, 0);
|
||||
}
|
||||
|
||||
|
||||
inline bool CMemoryMappedFile::CloseFileView(void* lpView)
|
||||
{
|
||||
if(0 != lpView)
|
||||
{
|
||||
return (TRUE == UnmapViewOfFile(lpView));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool CMemoryMappedFile::FlushFileView(void* lpView, DWORD dwBytesToFlush)
|
||||
{
|
||||
return (TRUE == FlushViewOfFile(lpView, dwBytesToFlush));
|
||||
}
|
||||
|
||||
|
||||
bool CMemoryMappedFile::GetFileSize(unsigned long& dwLowSize, unsigned long& dwHighSize)
|
||||
{
|
||||
if(INVALID_HANDLE_VALUE != m_hFile)
|
||||
{
|
||||
dwLowSize = ::GetFileSize(m_hFile, &dwHighSize);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
CFileMappedView::CFileMappedView(CMemoryMappedFile& mappedFile)
|
||||
: m_MappedFile(mappedFile), m_FilePointer(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
CFileMappedView::~CFileMappedView()
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
void* CFileMappedView::GetPointer(DWORD dwLowPosition,
|
||||
DWORD dwHighPosition,
|
||||
DWORD dwMappingSize)
|
||||
{
|
||||
Close();
|
||||
|
||||
m_FilePointer = m_MappedFile.GetFileView(
|
||||
dwLowPosition, dwHighPosition, dwMappingSize);
|
||||
|
||||
return m_FilePointer;
|
||||
}
|
||||
|
||||
void CFileMappedView::Flush(DWORD dwBytesToFlush)
|
||||
{
|
||||
m_MappedFile.FlushFileView(m_FilePointer, dwBytesToFlush);
|
||||
}
|
||||
|
||||
void CFileMappedView::Close()
|
||||
{
|
||||
m_MappedFile.CloseFileView(m_FilePointer);
|
||||
m_FilePointer = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
#ifndef _GAMA_NETWORKLIB_MEMORY_MAPPED_FILE_
|
||||
#define _GAMA_NETWORKLIB_MEMORY_MAPPED_FILE_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
|
||||
|
||||
// forward decl
|
||||
class CMemoryMappedFile;
|
||||
|
||||
class CFileMappedView
|
||||
{
|
||||
public:
|
||||
|
||||
CFileMappedView(CMemoryMappedFile& mappedFile);
|
||||
~CFileMappedView();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
|
||||
void* GetPointer(DWORD dwLowPosition = 0,
|
||||
DWORD dwHighPosition = 0, DWORD dwMappingSize = 0);
|
||||
|
||||
void Flush(DWORD dwBytesToFlush = 0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Flush<73>Ѵ<EFBFBD>. (IPC<50><43><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>)
|
||||
void Close(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴ´<DDB4>.
|
||||
|
||||
private:
|
||||
|
||||
CMemoryMappedFile& m_MappedFile;
|
||||
void* m_FilePointer;
|
||||
};
|
||||
|
||||
|
||||
class CMemoryMappedFile
|
||||
{
|
||||
public:
|
||||
|
||||
enum OpenMode
|
||||
{
|
||||
READ,
|
||||
READ_WRITE
|
||||
};
|
||||
|
||||
CMemoryMappedFile();
|
||||
~CMemoryMappedFile();
|
||||
|
||||
// <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
bool OpenFile(const char* szFileName, OpenMode eOpenMode);
|
||||
|
||||
// <20><DEB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰų<CFB0> <20><><EFBFBD><EFBFBD>.
|
||||
bool CreateSharedMemory(DWORD dwLowSize, DWORD dwHighSize = 0, const char* szFileName = 0);
|
||||
bool OpenSharedMemory(const char* szFileName, OpenMode eOpenMode);
|
||||
|
||||
bool IsOpen(); // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>ɴ<EFBFBD>.
|
||||
void Close(); // <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴ´<DDB4>.
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20>ش<EFBFBD>.
|
||||
bool GetFileSize(unsigned long& dwLowSize, unsigned long& dwHighSize);
|
||||
|
||||
private:
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20>並 <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
void* GetFileView(DWORD dwLowPosition,
|
||||
DWORD dwHighPosition = 0, DWORD dwMappingSize = 0);
|
||||
|
||||
static bool FlushFileView(void* lpView, DWORD dwBytesToFlush); // <20><><EFBFBD><EFBFBD> <20>並 Flush<73>Ѵ<EFBFBD>.
|
||||
static bool CloseFileView(void* lpView); // <20><><EFBFBD><EFBFBD> <20>並 <20>ݴ´<DDB4>.
|
||||
|
||||
HANDLE m_hFile;
|
||||
HANDLE m_hMap;
|
||||
DWORD m_dwFileViewMode;
|
||||
|
||||
friend class CFileMappedView;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user