169 lines
3.4 KiB
C++
169 lines
3.4 KiB
C++
#include "StdAfx.h"
|
|
#include "OptionManager.h"
|
|
|
|
|
|
OptionManager::OptionManager(void)
|
|
{
|
|
TCHAR temp[512];
|
|
GetCurrentDirectory(_countof(temp), temp);
|
|
m_folder = temp;
|
|
|
|
Init();
|
|
}
|
|
|
|
OptionManager::~OptionManager(void)
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
void OptionManager::Init()
|
|
{
|
|
|
|
m_options.reserve(OPTION_END);
|
|
for(int i = 0 ; i <= OPTION_END ; i++)
|
|
{
|
|
m_options.push_back(FALSE);
|
|
}
|
|
}
|
|
|
|
void OptionManager::Destroy()
|
|
{
|
|
m_lock.lock();
|
|
m_logFile.Close();
|
|
m_lock.unlock();
|
|
}
|
|
|
|
void OptionManager::WriteLog( const TCHAR* fmt,... )
|
|
{
|
|
SYSTEMTIME sysTime;
|
|
GetLocalTime(&sysTime);
|
|
|
|
TCHAR tFilePath[MAX_PATH];
|
|
_sntprintf_s(tFilePath, _countof(tFilePath),_T("%s\\log%04d%02d%02d.txt"), m_folder, sysTime.wYear, sysTime.wMonth, sysTime.wDay);
|
|
|
|
TCHAR message[1024];
|
|
va_list marker;
|
|
va_start(marker, fmt);
|
|
_vstprintf_s(message, _countof(message), fmt, marker);
|
|
va_end(marker);
|
|
|
|
m_lock.lock();
|
|
|
|
if(m_logFile.Open(tFilePath, CFile::modeCreate | CFile::modeNoTruncate | CFile::shareDenyNone | CFile::modeReadWrite))
|
|
{
|
|
if(0 == m_logFile.GetLength())
|
|
{
|
|
USHORT BOM = 0xfeff;
|
|
m_logFile.Write(&BOM,2);
|
|
}
|
|
m_logFile.SeekToEnd();
|
|
|
|
CString text;
|
|
text.Format(L"[%04d-%02d-%02d %02d:%02d:%02d] %s \r\n",
|
|
sysTime.wYear ,
|
|
sysTime.wMonth,
|
|
sysTime.wDay,
|
|
sysTime.wHour,
|
|
sysTime.wMinute,
|
|
sysTime.wSecond,
|
|
message);
|
|
|
|
m_logFile.Write(text.GetBuffer(), text.GetLength()*sizeof(TCHAR));
|
|
m_logFile.Close();
|
|
}
|
|
|
|
m_lock.unlock();
|
|
}
|
|
|
|
void OptionManager::LoadOptions()
|
|
{
|
|
CString optName;
|
|
|
|
if(GetOptionName(OPTION_MONITOR, optName))
|
|
{
|
|
BOOL b = GetRegistry(optName);
|
|
m_options[OPTION_MONITOR] = b;
|
|
}
|
|
|
|
if(GetOptionName(OPTION_RECURSIVE, optName))
|
|
{
|
|
BOOL b = GetRegistry(optName);
|
|
m_options[OPTION_RECURSIVE] = b;
|
|
}
|
|
|
|
if(GetOptionName(OPTION_CONSOLE, optName))
|
|
{
|
|
BOOL b = GetRegistry(optName);
|
|
m_options[OPTION_CONSOLE] = b;
|
|
}
|
|
}
|
|
|
|
void OptionManager::SetOption(const OptionTypes opt, BOOL b)
|
|
{
|
|
m_options[opt] = b;
|
|
|
|
CString optName;
|
|
if(GetOptionName(opt, optName))
|
|
{
|
|
SetRegistry(optName, b ? 1 :0);
|
|
}
|
|
}
|
|
BOOL OptionManager::GetOption(const OptionTypes opt)
|
|
{
|
|
return m_options[opt];
|
|
}
|
|
|
|
void OptionManager::SetRegistry(const TCHAR* option, int value)
|
|
{
|
|
TCHAR regKey[512];
|
|
_stprintf_s(regKey, _countof(regKey), _T("software\\lostsaga\\ls_launcher"));
|
|
|
|
HKEY key;
|
|
DWORD disp = 0;
|
|
LONG ret = RegCreateKeyEx(HKEY_CURRENT_USER, regKey,
|
|
0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &disp);
|
|
if(ret != ERROR_SUCCESS) return;
|
|
|
|
uint32 length = sizeof(value);
|
|
RegSetValueEx(key, option, 0, REG_DWORD, (BYTE*)&value, length);
|
|
|
|
RegCloseKey(key);
|
|
}
|
|
|
|
int OptionManager::GetRegistry(const TCHAR* option)
|
|
{
|
|
HKEY key;
|
|
LONG ret = RegOpenKeyEx(HKEY_CURRENT_USER, _T("software\\lostsaga\\ls_launcher"), 0, KEY_ALL_ACCESS, &key);
|
|
if(ERROR_SUCCESS != ret) return 0;
|
|
|
|
DWORD value = 0;
|
|
DWORD size = sizeof(value);
|
|
if(RegQueryValueEx(key, option, NULL, NULL, (LPBYTE)&value, &size) != ERROR_SUCCESS)
|
|
{
|
|
RegCloseKey(key);
|
|
return value;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
BOOL OptionManager::GetOptionName(const OptionTypes opt, CString& name)
|
|
{
|
|
switch(opt)
|
|
{
|
|
case OPTION_MONITOR :
|
|
name = _T("monitor");
|
|
return TRUE;
|
|
|
|
case OPTION_RECURSIVE :
|
|
name = _T("recursive");
|
|
return TRUE;
|
|
|
|
case OPTION_CONSOLE :
|
|
name = _T("console");
|
|
return TRUE;
|
|
}
|
|
|
|
name = "";
|
|
return FALSE;
|
|
}
|