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:
141
Server/RylServerProject/NFAuthClient/Nave/NFFilePtr.h
Normal file
141
Server/RylServerProject/NFAuthClient/Nave/NFFilePtr.h
Normal file
@@ -0,0 +1,141 @@
|
||||
/**
|
||||
* @file NFFilePtr.h
|
||||
* @brief FILE auto close class
|
||||
* @remarks
|
||||
* @author 강동명(edith2580@gmail.com)
|
||||
* @date 2009-04-02
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h> // standard I/O
|
||||
|
||||
namespace Nave {
|
||||
|
||||
/**
|
||||
* @class NFFilePtr
|
||||
* @brief FILE auto close class
|
||||
* @remarks NFFilePtr file(L"c:\\1.txt", L"rt"); \r\n
|
||||
* fgets(str, 128, file); \r\n
|
||||
* return;
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-04-05
|
||||
*/
|
||||
class NFFilePtr
|
||||
{
|
||||
public:
|
||||
/// NFFilePtr 생성자
|
||||
NFFilePtr() : m_pFile(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 파일 자동열기 생성자
|
||||
* @param file 파일명
|
||||
* @param mode 파일 모드
|
||||
*/
|
||||
NFFilePtr(LPCSTR file, LPCSTR mode)
|
||||
{
|
||||
m_pFile = fopen(file, mode);
|
||||
}
|
||||
|
||||
/// NFFilePtr 소멸자
|
||||
~NFFilePtr()
|
||||
{
|
||||
if(m_pFile)
|
||||
fclose(m_pFile);
|
||||
|
||||
m_pFile = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NFFilePtr1 = FilePtrW2 이터레이터
|
||||
* @warning NFFilePtr2는 더이상 사용할수 없습니다.
|
||||
*/
|
||||
NFFilePtr& operator=(NFFilePtr& _Right) throw()
|
||||
{
|
||||
Reset(_Right.Release());
|
||||
return (*this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief NFFilePtr = FILE* 이터레이터
|
||||
* @warning NFFilePtr에서 자동 fclose가 됩니다. \r\n
|
||||
* FILE*객체를 fclose하면 문제가 발생할 수있습니다.
|
||||
*/
|
||||
NFFilePtr& operator=(FILE* _Right) throw()
|
||||
{
|
||||
Reset(_Right);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief FILE* 형변환 오퍼레이터 입니다.
|
||||
* @return 현재의 파일 포인터
|
||||
*/
|
||||
operator FILE*() const throw()
|
||||
{
|
||||
return m_pFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 파일 포인터를 초기화 합니다. FILE이 close 되지 않습니다.
|
||||
* @return 현재의 파일 포인터
|
||||
*/
|
||||
FILE* Release()
|
||||
{
|
||||
FILE* fp = m_pFile;
|
||||
m_pFile = NULL;
|
||||
return fp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새로운 값으로 재설정합니다. 기존의 FILE은 close 됩니다.
|
||||
* @param fp 새로운 파일 포인터
|
||||
*/
|
||||
void Reset(LPCSTR file, LPCSTR mode)
|
||||
{
|
||||
if(m_pFile)
|
||||
fclose(m_pFile);
|
||||
|
||||
m_pFile = fopen(file, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새로운 값으로 재설정합니다.
|
||||
* 기존의 FILE은 close 됩니다.
|
||||
* @param fp 새로운 파일 포인터
|
||||
*/
|
||||
void Reset(FILE* fp)
|
||||
{
|
||||
if(m_pFile)
|
||||
fclose(m_pFile);
|
||||
|
||||
m_pFile = fp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 파일의 길이를 리턴합니다.
|
||||
* @return 파일의 길이
|
||||
*/
|
||||
long Length()
|
||||
{
|
||||
fpos_t cuspos;
|
||||
if(fgetpos( m_pFile, &cuspos ) != 0)
|
||||
return -1; // error
|
||||
|
||||
fseek( m_pFile, 0L, SEEK_END );
|
||||
long length = ftell( m_pFile );
|
||||
|
||||
fsetpos(m_pFile, &cuspos);
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
/// 파일 포인터
|
||||
FILE* m_pFile;
|
||||
};
|
||||
|
||||
}
|
||||
321
Server/RylServerProject/NFAuthClient/Nave/NFTokenizer.cpp
Normal file
321
Server/RylServerProject/NFAuthClient/Nave/NFTokenizer.cpp
Normal file
@@ -0,0 +1,321 @@
|
||||
#include "NFTokenizer.h"
|
||||
|
||||
namespace Nave {
|
||||
|
||||
NFTokenizerA::NFTokenizerA(const std::string& _str, const std::string& _delim)
|
||||
{
|
||||
|
||||
if ((_str.length() == 0) || (_delim.length() == 0)) return;
|
||||
|
||||
token_str = _str;
|
||||
delim = _delim;
|
||||
|
||||
/*
|
||||
Remove sequential delimiter
|
||||
*/
|
||||
unsigned int curr_pos = 0;
|
||||
|
||||
while(true)
|
||||
{
|
||||
if ((curr_pos = token_str.find(delim,curr_pos)) != std::string::npos)
|
||||
{
|
||||
curr_pos += delim.length();
|
||||
|
||||
while(token_str.find(delim,curr_pos) == curr_pos)
|
||||
{
|
||||
token_str.erase(curr_pos,delim.length());
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
Trim leading delimiter
|
||||
*/
|
||||
if (token_str.find(delim,0) == 0)
|
||||
{
|
||||
token_str.erase(0,delim.length());
|
||||
}
|
||||
|
||||
/*
|
||||
Trim ending delimiter
|
||||
*/
|
||||
curr_pos = 0;
|
||||
if ((curr_pos = token_str.rfind(delim)) != std::string::npos)
|
||||
{
|
||||
if (curr_pos != (token_str.length() - delim.length())) return;
|
||||
token_str.erase(token_str.length() - delim.length(),delim.length());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int NFTokenizerA::CountTokens()
|
||||
{
|
||||
|
||||
unsigned int prev_pos = 0;
|
||||
int num_tokens = 0;
|
||||
|
||||
if (token_str.length() > 0)
|
||||
{
|
||||
num_tokens = 0;
|
||||
|
||||
unsigned int curr_pos = 0;
|
||||
while(true)
|
||||
{
|
||||
if ((curr_pos = token_str.find(delim,curr_pos)) != std::string::npos)
|
||||
{
|
||||
num_tokens++;
|
||||
prev_pos = curr_pos;
|
||||
curr_pos += delim.length();
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
return ++num_tokens;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool NFTokenizerA::HasMoreTokens()
|
||||
{
|
||||
return (token_str.length() > 0);
|
||||
}
|
||||
|
||||
std::string NFTokenizerA::NextToken()
|
||||
{
|
||||
|
||||
if (token_str.length() == 0)
|
||||
return "";
|
||||
|
||||
std::string tmp_str = "";
|
||||
unsigned int pos = token_str.find(delim,0);
|
||||
|
||||
if (pos != std::string::npos)
|
||||
{
|
||||
tmp_str = token_str.substr(0,pos);
|
||||
token_str = token_str.substr(pos+delim.length(),token_str.length()-pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_str = token_str.substr(0,token_str.length());
|
||||
token_str = "";
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
int NFTokenizerA::NextIntToken()
|
||||
{
|
||||
return atoi(NextToken().c_str());
|
||||
}
|
||||
|
||||
double NFTokenizerA::NextFloatToken()
|
||||
{
|
||||
return atof(NextToken().c_str());
|
||||
}
|
||||
|
||||
std::string NFTokenizerA::NextToken(const std::string& delimiter)
|
||||
{
|
||||
if (token_str.length() == 0)
|
||||
return "";
|
||||
|
||||
std::string tmp_str = "";
|
||||
unsigned int pos = token_str.find(delimiter,0);
|
||||
|
||||
if (pos != std::string::npos)
|
||||
{
|
||||
tmp_str = token_str.substr(0,pos);
|
||||
token_str = token_str.substr(pos + delimiter.length(),token_str.length() - pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_str = token_str.substr(0,token_str.length());
|
||||
token_str = "";
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
std::string& NFTokenizerA::RemainingString()
|
||||
{
|
||||
return token_str;
|
||||
}
|
||||
|
||||
std::string NFTokenizerA::FilterNextToken(const std::string& filterStr)
|
||||
{
|
||||
std::string tmp_str = NextToken();
|
||||
unsigned int currentPos = 0;
|
||||
|
||||
while((currentPos = tmp_str.find(filterStr,currentPos)) != std::string::npos)
|
||||
{
|
||||
tmp_str.erase(currentPos,filterStr.length());
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
|
||||
// unicode type
|
||||
NFTokenizerW::NFTokenizerW(const std::wstring& _str, const std::wstring& _delim)
|
||||
{
|
||||
|
||||
if ((_str.length() == 0) || (_delim.length() == 0)) return;
|
||||
|
||||
token_str = _str;
|
||||
delim = _delim;
|
||||
|
||||
/*
|
||||
Remove sequential delimiter
|
||||
*/
|
||||
unsigned int curr_pos = 0;
|
||||
|
||||
while(true)
|
||||
{
|
||||
if ((curr_pos = token_str.find(delim,curr_pos)) != std::wstring::npos)
|
||||
{
|
||||
curr_pos += delim.length();
|
||||
|
||||
while(token_str.find(delim,curr_pos) == curr_pos)
|
||||
{
|
||||
token_str.erase(curr_pos,delim.length());
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
Trim leading delimiter
|
||||
*/
|
||||
if (token_str.find(delim,0) == 0)
|
||||
{
|
||||
token_str.erase(0,delim.length());
|
||||
}
|
||||
|
||||
/*
|
||||
Trim ending delimiter
|
||||
*/
|
||||
curr_pos = 0;
|
||||
if ((curr_pos = token_str.rfind(delim)) != std::wstring::npos)
|
||||
{
|
||||
if (curr_pos != (token_str.length() - delim.length())) return;
|
||||
token_str.erase(token_str.length() - delim.length(),delim.length());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int NFTokenizerW::CountTokens()
|
||||
{
|
||||
unsigned int prev_pos = 0;
|
||||
int num_tokens = 0;
|
||||
|
||||
if (token_str.length() > 0)
|
||||
{
|
||||
num_tokens = 0;
|
||||
|
||||
unsigned int curr_pos = 0;
|
||||
while(true)
|
||||
{
|
||||
if ((curr_pos = token_str.find(delim,curr_pos)) != std::wstring::npos)
|
||||
{
|
||||
num_tokens++;
|
||||
prev_pos = curr_pos;
|
||||
curr_pos += delim.length();
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
return ++num_tokens;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool NFTokenizerW::HasMoreTokens()
|
||||
{
|
||||
return (token_str.length() > 0);
|
||||
}
|
||||
|
||||
std::wstring NFTokenizerW::NextToken()
|
||||
{
|
||||
|
||||
if (token_str.length() == 0)
|
||||
return L"";
|
||||
|
||||
std::wstring tmp_str = L"";
|
||||
unsigned int pos = token_str.find(delim,0);
|
||||
|
||||
if (pos != std::wstring::npos)
|
||||
{
|
||||
tmp_str = token_str.substr(0,pos);
|
||||
token_str = token_str.substr(pos+delim.length(),token_str.length()-pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_str = token_str.substr(0,token_str.length());
|
||||
token_str = L"";
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
int NFTokenizerW::NextIntToken()
|
||||
{
|
||||
return _wtoi(NextToken().c_str());
|
||||
}
|
||||
|
||||
double NFTokenizerW::NextFloatToken()
|
||||
{
|
||||
return _wtof(NextToken().c_str());
|
||||
}
|
||||
|
||||
std::wstring NFTokenizerW::NextToken(const std::wstring& delimiter)
|
||||
{
|
||||
if (token_str.length() == 0)
|
||||
return L"";
|
||||
|
||||
std::wstring tmp_str = L"";
|
||||
unsigned int pos = token_str.find(delimiter,0);
|
||||
|
||||
if (pos != std::wstring::npos)
|
||||
{
|
||||
tmp_str = token_str.substr(0,pos);
|
||||
token_str = token_str.substr(pos + delimiter.length(),token_str.length() - pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp_str = token_str.substr(0,token_str.length());
|
||||
token_str = L"";
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
std::wstring& NFTokenizerW::RemainingString()
|
||||
{
|
||||
return token_str;
|
||||
}
|
||||
|
||||
std::wstring NFTokenizerW::FilterNextToken(const std::wstring& filterStr)
|
||||
{
|
||||
std::wstring tmp_str = NextToken();
|
||||
unsigned int currentPos = 0;
|
||||
|
||||
while((currentPos = tmp_str.find(filterStr,currentPos)) != std::wstring::npos)
|
||||
{
|
||||
tmp_str.erase(currentPos,filterStr.length());
|
||||
}
|
||||
|
||||
return tmp_str;
|
||||
}
|
||||
|
||||
}
|
||||
120
Server/RylServerProject/NFAuthClient/Nave/NFTokenizer.h
Normal file
120
Server/RylServerProject/NFAuthClient/Nave/NFTokenizer.h
Normal file
@@ -0,0 +1,120 @@
|
||||
/**
|
||||
* @file NFTokenizer.h
|
||||
* @brief Tokenizer 클래스
|
||||
* @remarks
|
||||
* @author 강동명(edith2580@gmail.com)
|
||||
* @date 2009-04-02
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
namespace Nave {
|
||||
|
||||
/**
|
||||
* @class NFTokenizerA
|
||||
* @brief 멀티바이트용 Tokenizer
|
||||
* @remarks
|
||||
* Nave::String tempStr = L"01|02|03|04|05|06|07|08|09|10|11|12"; \r\n
|
||||
* \r\n
|
||||
* Nave::NFTokenizer strtok = Nave::NFTokenizer(tempStr, L"|"); \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Number Of Tokens: %d"), strtok.CountTokens()); \r\n
|
||||
* LOG_IMPORTANT((L"String: %s"), strtok.RemainingString().c_str()); \r\n
|
||||
* \r\n
|
||||
* int cnt = strtok.CountTokens(); \r\n
|
||||
* Nave::String finalString = L""; \r\n
|
||||
* \r\n
|
||||
* for(int i = 0; i < cnt; i++) \r\n
|
||||
* { \r\n
|
||||
* Nave::String tempStr = L""; \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Token[%d] ----> [%s]"), i, strtok.NextToken().c_str());\r\n
|
||||
* LOG_IMPORTANT((L"Token Count : %d"), strtok.CountTokens()); \r\n
|
||||
* \r\n
|
||||
* finalString += tempStr; \r\n
|
||||
* } \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Final String : %s"), finalString.c_str());
|
||||
*
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-04-05
|
||||
*/
|
||||
class NFTokenizerA
|
||||
{
|
||||
public:
|
||||
NFTokenizerA(const std::string& _str, const std::string& _delim);
|
||||
~NFTokenizerA(){};
|
||||
|
||||
int CountTokens();
|
||||
bool HasMoreTokens();
|
||||
std::string NextToken();
|
||||
int NextIntToken();
|
||||
double NextFloatToken();
|
||||
std::string NextToken(const std::string& delim);
|
||||
std::string& RemainingString();
|
||||
std::string FilterNextToken(const std::string& filterStr);
|
||||
|
||||
private:
|
||||
std::string token_str;
|
||||
std::string delim;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @class NFTokenizerW
|
||||
* @brief 유니코드용 Tokenizer
|
||||
* @remarks
|
||||
* Nave::String tempStr = L"01|02|03|04|05|06|07|08|09|10|11|12"; \r\n
|
||||
* \r\n
|
||||
* Nave::NFTokenizer strtok = Nave::NFTokenizer(tempStr, L"|"); \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Number Of Tokens: %d"), strtok.CountTokens()); \r\n
|
||||
* LOG_IMPORTANT((L"String: %s"), strtok.RemainingString().c_str()); \r\n
|
||||
* \r\n
|
||||
* int cnt = strtok.CountTokens(); \r\n
|
||||
* Nave::String finalString = L""; \r\n
|
||||
* \r\n
|
||||
* for(int i = 0; i < cnt; i++) \r\n
|
||||
* { \r\n
|
||||
* Nave::String tempStr = L""; \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Token[%d] ----> [%s]"), i, strtok.NextToken().c_str());\r\n
|
||||
* LOG_IMPORTANT((L"Token Count : %d"), strtok.CountTokens()); \r\n
|
||||
* \r\n
|
||||
* finalString += tempStr; \r\n
|
||||
* } \r\n
|
||||
* \r\n
|
||||
* LOG_IMPORTANT((L"Final String : %s"), finalString.c_str());
|
||||
* @par
|
||||
* @author Edith
|
||||
* @date 2009-04-05
|
||||
*/
|
||||
class NFTokenizerW
|
||||
{
|
||||
public:
|
||||
NFTokenizerW(const std::wstring& _str, const std::wstring& _delim);
|
||||
~NFTokenizerW(){};
|
||||
|
||||
int CountTokens();
|
||||
bool HasMoreTokens();
|
||||
std::wstring NextToken();
|
||||
int NextIntToken();
|
||||
double NextFloatToken();
|
||||
std::wstring NextToken(const std::wstring& delim);
|
||||
std::wstring& RemainingString();
|
||||
std::wstring FilterNextToken(const std::wstring& filterStr);
|
||||
|
||||
private:
|
||||
std::wstring token_str;
|
||||
std::wstring delim;
|
||||
};
|
||||
|
||||
typedef NFTokenizerW NFTokenizer;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user