// LogViewView.cpp : CLogViewView Ŭ·¡½ºÀÇ ±¸Çö
|
//
|
|
#include "stdafx.h"
|
#include "LogView.h"
|
|
#include "LogViewDoc.h"
|
#include "LogViewView.h"
|
|
#include "PathData.h"
|
#include "LogManager.h"
|
#include "MemoryManager.h"
|
#include "LogViewOption.h"
|
|
#include "PathSettingDlg.h"
|
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#endif
|
|
|
// CLogViewView
|
|
IMPLEMENT_DYNCREATE(CLogViewView, CFormView)
|
|
BEGIN_MESSAGE_MAP(CLogViewView, CFormView)
|
ON_WM_CREATE()
|
ON_WM_DESTROY()
|
ON_WM_TIMER()
|
ON_BN_CLICKED(IDC_CHECK_AutoScroll, &CLogViewView::OnBnClickedCheckAutoscroll)
|
ON_CBN_SELCHANGE(IDC_COMBO_ViewLevel, &CLogViewView::OnCbnSelchangeComboViewlevel)
|
ON_COMMAND(ID_Option_LogSave, &CLogViewView::OnOptionLogsave)
|
ON_BN_CLICKED(IDC_Button_MapSave, &CLogViewView::OnBnClickedButtonMapsave)
|
ON_COMMAND(ID_LogPathSetting, &CLogViewView::OnLogpathsetting)
|
ON_CBN_SELCHANGE(IDC_COMBO_LogID, &CLogViewView::OnCbnSelchangeComboLogid)
|
ON_WM_SIZE()
|
END_MESSAGE_MAP()
|
|
// CLogViewView »ý¼º/¼Ò¸ê
|
|
CLogViewView::CLogViewView()
|
: CFormView(CLogViewView::IDD)
|
, m_bAutoScroll(TRUE)
|
, m_nViewLevel(0)
|
, m_bKillTimer(false)
|
, m_nListPrintCount(100)
|
, m_nViewLogIndex(0)
|
, m_ComboViewLastLogID(0)
|
{
|
//¸â¹ö º¯¼ö ÃʱâÈ
|
m_nIndex = 0;
|
m_nLogSaveDelay = 1000;
|
m_nMemoryMapReadDelay = 10;
|
m_nCommandReadDelay = 1000;
|
m_nProcessID = 0;
|
m_nLogSaveLevel = 4;
|
|
m_pPathData = new CPathData();
|
|
/*for( int i = 0; i < LV_FCOUNT; i++)
|
{
|
m_nLogID[i] = -1;
|
m_strLogPath[i] = _T("");
|
m_strLogName[i] = _T("");
|
}*/
|
|
m_strDefaultPath = _T("");
|
}
|
|
CLogViewView::~CLogViewView()
|
{
|
//·Î±× View ¼Ò¸ê
|
if(m_pLogManager != NULL)
|
delete m_pLogManager;
|
m_pLogManager = NULL;
|
|
if(m_pPathData != NULL)
|
delete m_pPathData;
|
m_pPathData = NULL;
|
|
//·Î±× ¸Þ¸ð¸® Å¥ ¼Ò¸ê
|
for(int i = 0; i < LV_FCOUNT; i++)
|
{
|
if(m_pMemoryManager[i] != NULL)
|
delete m_pMemoryManager[i];
|
m_pMemoryManager[i] = NULL;
|
}
|
}
|
|
// CLogViewView Áø´Ü
|
|
#ifdef _DEBUG
|
void CLogViewView::AssertValid() const
|
{
|
CFormView::AssertValid();
|
}
|
|
void CLogViewView::Dump(CDumpContext& dc) const
|
{
|
CFormView::Dump(dc);
|
}
|
|
CLogViewDoc* CLogViewView::GetDocument() const // µð¹ö±×µÇÁö ¾ÊÀº ¹öÀüÀº ÀζóÀÎÀ¸·Î ÁöÁ¤µË´Ï´Ù.
|
{
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLogViewDoc)));
|
return (CLogViewDoc*)m_pDocument;
|
}
|
#endif //_DEBUG
|
|
|
// CLogViewView ¸Þ½ÃÁö 󸮱â
|
|
int CLogViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
{
|
if (CFormView::OnCreate(lpCreateStruct) == -1)
|
return -1;
|
|
return 0;
|
}
|
|
void CLogViewView::OnDestroy()
|
{
|
CFormView::OnDestroy();
|
|
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
|
if( m_hDupCheck != NULL) ::CloseHandle(m_hDupCheck);
|
|
//°øÀ¯¸Þ¸ð¸®¸¦ Àоî¿À´Â ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù.
|
KillTimer(READ_SHAREDMAP);
|
|
//³²¾ÆÀÖ´Â ·Î±×¸¦ ÀúÀåÇÕ´Ï´Ù.
|
for( int i = 0; i < LV_FCOUNT; i++)
|
m_pMemoryManager[i]->SaveLog();
|
Sleep(50);
|
|
//·Î±× ÆÄÀÏÀ» ÀúÀåÇϴ ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù.
|
KillTimer(SAVE_LOGFILE);
|
//Ä¿¸Çµå¸¦ Àоî¿À´Â ŸÀ̸Ӹ¦ ¼Ò¸êÇÕ´Ï´Ù.
|
KillTimer(READ_COMMAND);
|
|
//SaveOptionFile();
|
SaveINIFile();
|
}
|
|
void CLogViewView::DoDataExchange(CDataExchange* pDX)
|
{
|
CFormView::DoDataExchange(pDX);
|
DDX_Control(pDX, IDC_List_Log, m_ListLogViewer);
|
DDX_Check(pDX, IDC_CHECK_AutoScroll, m_bAutoScroll);
|
DDX_CBIndex(pDX, IDC_COMBO_ViewLevel, m_nViewLevel);
|
DDX_Control(pDX, IDC_COMBO_ViewLevel, m_ComboViewLevel);
|
DDX_CBIndex(pDX, IDC_COMBO_LogID, m_nViewLogIndex);
|
DDX_Control(pDX, IDC_COMBO_LogID, m_ComboViewLogID);
|
}
|
|
BOOL CLogViewView::PreCreateWindow(CREATESTRUCT& cs)
|
{
|
// TODO: CREATESTRUCT cs¸¦ ¼öÁ¤ÇÏ¿© ¿©±â¿¡¼
|
// Window Ŭ·¡½º ¶Ç´Â ½ºÅ¸ÀÏÀ» ¼öÁ¤ÇÕ´Ï´Ù.
|
|
return CFormView::PreCreateWindow(cs);
|
}
|
|
void CLogViewView::OnInitialUpdate()
|
{
|
CFormView::OnInitialUpdate();
|
GetParentFrame()->RecalcLayout();
|
ResizeParentToFit();
|
|
ReadINIFile();
|
|
//m_strMemoryMap = _T("LOGVIEWER");
|
|
//½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´ÂÁö È®ÀÎÇϰí ProcessID¸¦ ¾ò¾î¿É´Ï´Ù.
|
//ÀÌ¹Ì ½ÇÇàµÇ¾î ÀÖ´Â LogView°¡ ÀÖ´Ù¸é 0,1,2,3.. ¼ø¼·Î ProcessID°¡ Áõ°¡ÇÕ´Ï´Ù.
|
//GetProcessID´Â À̺¥Æ® °´Ã¼¸¦ »ç¿ëÇÏ¿© ÀÌ¹Ì ½ÇÇàµÇ¾î ÀÖ´Â LogView¸¦ üũÇÕ´Ï´Ù.
|
//m_nProcessID = GetProcessID((TCHAR*)(LPCTSTR)MemoryMapName);
|
|
//¸¸ÀÏ ÁöÁ¤µÈ ½ÇÇà°³¼ö¸¦ ÃʰúÇϸé..
|
//if( m_nProcessID == 0xff)
|
// {
|
// AfxMessageBox(_T("·Î±×View¸¦ 2°³ ÀÌ»ó ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù."));
|
// PostQuitMessage(0);
|
// }
|
|
if(true == CheckDup((TCHAR*)(LPCTSTR)m_strMemoryMap))
|
{
|
AfxMessageBox(_T("ÇÁ·Î±×·¥ÀÌ Áߺ¹½ÇÇà µÇ¾ú½À´Ï´Ù."));
|
PostQuitMessage(0);
|
}
|
|
m_nProcessID = 0;
|
|
//¸Þ¸ð¸®¸Ê dll¸¦ »ç¿ëÇϱâ À§Çؼ´Â ¸Þ¸ð¸® ¸Ê À̸§ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
|
//ÀоîµéÀÌ´Â ·Î±×¸¦ Àд ÂÊÀÇ LogID´Â Ç×»ó 0ÀÔ´Ï´Ù.
|
m_pLogManager = new CLogManager(0,(TCHAR*)(LPCTSTR)m_strMemoryMap);
|
|
//Àоî¿Â ·Î±×¸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ´Â ¸Þ¸ð¸® Å¥¸¦ °ü¸®Çϴ Ŭ·¡½º ÀÔ´Ï´Ù.
|
//LOG_MEMORY_SIZEÀÇ °ªÀ» º¯°æÇÒ¶§ MemoryManager.h¿¡ ÀÖ´Â TLOGSIZE °ªµµ º¯°æÇØ¾ß ÇÕ´Ï´Ù.
|
for(int i = 0; i < LV_FCOUNT; i++)
|
m_pMemoryManager[i] = new CMemoryManager(LOG_MEMORY_COUNT, LOG_MEMORY_SIZE,
|
m_pPathData->GetIDFromIndex(i),m_pPathData->GetPathFromIndex(i), m_pPathData->GetNameFromIndex(i));
|
|
//¸®½ºÆ® ÄÁÆ®·Ñ ÃʱâÈ
|
if(m_ListLogViewer.GetHeaderCtrl()->GetItemCount() <= 0)
|
{
|
m_ListLogViewer.InsertColumn(0,_T("Level : Index"), LVCFMT_LEFT,100);
|
m_ListLogViewer.InsertColumn(1,_T("LogID"), LVCFMT_LEFT,70);
|
m_ListLogViewer.InsertColumn(2,_T("Time"), LVCFMT_LEFT,100);
|
m_ListLogViewer.InsertColumn(3,_T("Log"), LVCFMT_LEFT,1000);
|
}
|
|
//·Î±× ¸®½ºÆ®¿¡ ·¹º§ Á¦ÇÑÀ» À§ÇØ ÄÞº¸¸®½ºÆ®¿¡ ¹®ÀÚ¿À» Ãß°¡ÇÕ´Ï´Ù.
|
m_ComboViewLevel.AddString(_T(" Level 0"));
|
m_ComboViewLevel.AddString(_T(" Level 1"));
|
m_ComboViewLevel.AddString(_T(" Level 2"));
|
m_ComboViewLevel.AddString(_T(" Level 3"));
|
m_ComboViewLevel.AddString(_T(" Level 4"));
|
|
CString LogID = _T("");
|
int nLogID = -1;
|
for(int i = 0; i < LV_FCOUNT; i++)
|
{
|
|
nLogID = m_pPathData->GetIDFromIndex(i);
|
if( nLogID != -1)
|
{
|
LogID = _T("");
|
LogID.Format(_T("%d"), nLogID);
|
m_ComboViewLogID.AddString(LogID);
|
}
|
}
|
m_ComboViewLogID.AddString(_T("¸ðµÎÃâ·Â"));
|
|
m_ComboViewLastLogID = m_ComboViewLogID.GetCount();
|
m_ComboViewLastLogID--;
|
|
m_nViewLevel = 4;
|
m_nViewLogIndex = 0;//m_ComboViewLastLogID;
|
UpdateData(false);
|
|
//¸Þ¸ð¸® ¸ÊÀ» Àд ŸÀÌ¸Ó »ý¼º
|
SetTimer(READ_SHAREDMAP,m_nMemoryMapReadDelay,0);
|
//·Î±× ÆÄÀÏÀ» ÀúÀåÇϴ ŸÀÌ¸Ó »ý¼º
|
SetTimer(SAVE_LOGFILE,m_nLogSaveDelay,0);
|
//Ä¿¸Çµå¸¦ Àд ŸÀÌ¸Ó »ý¼º
|
SetTimer(READ_COMMAND,m_nCommandReadDelay,0);
|
//1ÀÏ 1ȸ ÇÑ´ÞÀü ·Î±× »èÁ¦
|
SetTimer(DELETE_LOG,86400000,0);
|
UpdateData(false);
|
DeleteLog();
|
}
|
|
void CLogViewView::OnTimer(UINT_PTR nIDEvent)
|
{
|
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù.
|
|
if(!m_bKillTimer)
|
{
|
switch(nIDEvent)
|
{
|
case READ_SHAREDMAP:
|
//ÁÖ±âÀûÀ¸·Î ¸Þ¸ð¸® ¸Ê ÆÄÀÏÀ» Àоî¿É´Ï´Ù.
|
ReadSharedMemoryMap();
|
break;
|
case SAVE_LOGFILE:
|
//ÁÖ±âÀûÀ¸·Î ·Î±×ÆÄÀÏ¿¡ ÀúÀåÇÕ´Ï´Ù.
|
SaveLogFile();
|
break;
|
case READ_COMMAND:
|
//ÁÖ±âÀûÀ¸·Î Ä¿¸Çµå°¡ ÀÖ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
|
ReadCommand();
|
break;
|
case DELETE_LOG:
|
DeleteLog();
|
break;
|
}
|
}
|
|
CFormView::OnTimer(nIDEvent);
|
}
|
|
void CLogViewView::ReadSharedMemoryMap(void)
|
{
|
static unsigned int CurIndex;
|
static unsigned int ListIndex = 0;
|
|
unsigned int curLevel;
|
int curLogID;
|
unsigned int curProcess;
|
SYSTEMTIME curTime;
|
TCHAR strMessage[LOG_MEMORY_SIZE] = {0};
|
|
CString Temp;
|
bool Result = false;
|
|
CurIndex = m_pLogManager->GetIndex();
|
|
int LogIndex = -1;
|
//40Àº APP°¡ ´Ù¿îµÇ¾ú´Ù°¡ ´Ù½Ã ½ÇÇàµÉ¶§ 0À¸·Î ÃʱâÈ µÇ¹Ç·Î
|
//±× Â÷°¡ 40ÀÌ»óÀ̸é viewerµµ À妽º¸¦ ¶È°°ÀÌ ¸ÂÃß°Ô µË´Ï´Ù.
|
if( (CurIndex - m_nIndex) > 400 )
|
m_nIndex = CurIndex;
|
|
while( m_nIndex < CurIndex)
|
{
|
//m_nListPrintCountÀº Çѹø¿¡ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â °¹¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
|
//m_nListPrintCount¿¡ ÁöÁ¤µÈ °³¼ö°¡ ³ÑÀ¸¸é ¸®½ºÆ®¸¦ ÃʱâÈ ÇÕ´Ï´Ù.
|
if( 0 == ListIndex % m_nListPrintCount)
|
{
|
ListIndex = 0;
|
m_ListLogViewer.DeleteAllItems();
|
}
|
|
m_pLogManager->ReadLog(strMessage, m_nIndex, &curLogID, &curLevel,&curProcess,&curTime);
|
|
LogIndex = m_pPathData->GetIndexFromID(curLogID);
|
|
if(LogIndex == m_nViewLogIndex || m_nViewLogIndex == m_ComboViewLastLogID)
|
{
|
//¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§¿¡ ÇØ´çÇϸé
|
if(curLevel <= m_nViewLevel)
|
{
|
//¸®½ºÆ®Ã¢¿¡ ·Î±×¸¦ Ãâ·ÂÇÑ´Ù.
|
Temp = _T("");
|
Temp.Format(_T("L%02d:%09d"),curLevel,m_nIndex);
|
|
m_ListLogViewer.InsertItem( ListIndex, Temp, 0);
|
|
Temp = _T("");
|
Temp.Format(_T("%02d"),curLogID);
|
|
m_ListLogViewer.SetItemText( ListIndex, 1, Temp);
|
|
Temp = _T("");
|
Temp.Format(_T("[%02d:%02d:%02d.%03d]"),
|
curTime.wHour,curTime.wMinute,curTime.wSecond,curTime.wMilliseconds);
|
|
m_ListLogViewer.SetItemText( ListIndex, 2, Temp);
|
|
m_ListLogViewer.SetItemText( ListIndex, 3, strMessage);
|
|
//ÀÚµ¿ ½ºÅ©·ÑÀÌ µÇ¾îÀÖ´Ù¸é..
|
if(m_bAutoScroll)
|
m_ListLogViewer.EnsureVisible(ListIndex,-1);
|
ListIndex++;
|
}
|
}
|
|
//¸¸ÀÏ ·Î±× ÆÄÀÏ¿¡ ÀúÀåÇÒ ·¹º§¿¡ ÇØ´çÇϸé
|
if(curLevel <= m_nLogSaveLevel)
|
{
|
if(LogIndex >= 0 && LogIndex < LV_FCOUNT )
|
//Àоî¿Â ·Î±×¸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ¿© ½×¾Æ³õ´Â´Ù.
|
m_pMemoryManager[LogIndex]->PushLog(strMessage, &m_nIndex,
|
&curLevel, &curProcess, &curTime);
|
}
|
|
m_nIndex++;
|
|
}
|
|
}
|
|
void CLogViewView::SaveLogFile(void)
|
{
|
//Å¥¿¡ ½×¿©ÀÖ´Â ·Î±×µéÀ» ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.
|
for(int i = 0; i < LV_FCOUNT; i++)
|
m_pMemoryManager[i]->SaveLog();
|
}
|
|
void CLogViewView::ReadCommand(void)
|
{
|
static unsigned char Command = 0;
|
//º¯°æµÈ Ä¿¸Çµå°¡ ÀÖ´ÂÁö üũÇÑ´Ù.
|
m_pLogManager->GetFirstCommand(&Command);
|
|
//¸¸ÀÏ Ä¿¸Çµå °ªÀÌ 1À̸é ÇÁ·Î±×·¥ º¯¼ö°ªÀ» ´ã°í ÀÖ´Â
|
//¸ÊÀ» ÀúÀåÇØ¾ßÇÔ
|
if(Command ==1)
|
{
|
CString Path;
|
//ÇöÀç ÇÁ·Î±×·¥ ½ÇÇà °æ·Î¸¦ ¾Ë¾Æ¿Â´Ù.
|
//¸ÊÆÄÀÏÀ» ÀúÀåÇÑ´Ù.
|
m_pLogManager->SaveBinary((TCHAR*)(LPCTSTR)m_strDefaultPath);
|
|
Command = 0;
|
m_pLogManager->SetFirstCommand(0);
|
}
|
}
|
|
//ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â ÇöÀç°æ·Î¸¦ ¾Ë¾Æ¿À´Â ÇÔ¼ö
|
void CLogViewView::GetModulePath(CString &Temp)
|
{
|
TCHAR szBuffer[MAX_PATH];
|
memset(szBuffer,0x00,MAX_PATH*sizeof(TCHAR));
|
|
::GetModuleFileName(NULL,szBuffer,MAX_PATH);
|
|
for(int i = lstrlen(szBuffer) -1; i>=0; --i)
|
{
|
if(szBuffer[i] == '\\')
|
{
|
int j = lstrlen(szBuffer)-1;
|
for(;j>=i;--j)
|
{
|
szBuffer[j] = NULL;
|
}
|
|
if(szBuffer[j] == ';') szBuffer[j+1] = '\\';
|
|
szBuffer[j+1] = '\\';
|
|
Temp = szBuffer;
|
return;
|
}
|
}
|
}
|
|
void CLogViewView::OnBnClickedCheckAutoscroll()
|
{
|
UpdateData();
|
}
|
|
void CLogViewView::OnCbnSelchangeComboViewlevel()
|
{
|
UpdateData();
|
//¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§ÀÌ º¯°ßµÇ¸é ±× °ªÀ» °¡Á®¿Â´Ù.
|
//m_nViewLevel;
|
}
|
|
void CLogViewView::OnOptionLogsave()
|
{
|
//ȯ°æ¼³Á¤ ¸Þ´º¸¦ ¼±ÅÃÇÏ¿´À»¶§...
|
CLogViewOption LogSaveOption;
|
|
//ÀÌ¹Ì ÀúÀåµÇ¾î ÀÖ´Â °ªÀ» ´ÙÀ̾ó·Î±×¿¡ Ç¥½ÃÇÑ´Ù.
|
LogSaveOption.m_nOptionLogSaveDelay = m_nLogSaveDelay; //·Î±× ÀúÀå ÁÖ±â
|
LogSaveOption.m_nOptionCommandReadDelay = m_nCommandReadDelay; //Ä¿¸Çµå¸¦ üũÇÏ´Â ÁÖ±â
|
LogSaveOption.m_nOptionMemoryMapDelay = m_nMemoryMapReadDelay; //¸Þ¸ð¸® ¸ÊÀ» Àоî¿À´Â ÁÖ±â
|
LogSaveOption.m_nOptionLogSaveLevel = m_nLogSaveLevel; //·Î±×¸¦ ÀúÀåÇÏ´Â ·¹º§
|
LogSaveOption.m_nOptionListPrintCount = m_nListPrintCount; //¸®½ºÆ® Ãâ·Â ÁÙ¼ö
|
|
INT_PTR nResult = LogSaveOption.DoModal();
|
|
//´ÙÀ̾ó ·Î±×¿¡¼ ¿É¼Ç°ªÀ» ¸ðµÎ ÀúÀåÇÏ¿´À»¶§..
|
if(nResult == IDOK)
|
{
|
//´ÙÀ̾ó·Î±×¿¡ ÀúÀåµÈ ·Î±×ÀúÀå ·¹º§À» Àоî¿Â´Ù.
|
m_nLogSaveLevel = LogSaveOption.m_nOptionLogSaveLevel;
|
|
//´ÙÀ̾ó·Î±×¿¡ ÀúÀåµÈ ¸®½ºÆ® Ãâ·Â ÁÙ¼ö¸¦ °¡Á®¿Â´Ù.
|
m_nListPrintCount = LogSaveOption.m_nOptionListPrintCount;
|
|
//¸¸ÀÏ ±âÁ¸ÀÇ ¸Þ¸ð¸® ¸Ê Àоî¿À´Â ÁֱⰡ º¯°æµÇ¾ú´Ù¸é..
|
if(m_nMemoryMapReadDelay != LogSaveOption.m_nOptionMemoryMapDelay)
|
{
|
//ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå..
|
m_bKillTimer = true;
|
Sleep(10);
|
//ŸÀ̸Ӹ¦ Á×À̰í..
|
KillTimer(READ_SHAREDMAP);
|
m_nMemoryMapReadDelay = LogSaveOption.m_nOptionMemoryMapDelay;
|
//»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù.
|
SetTimer(READ_SHAREDMAP,m_nMemoryMapReadDelay,0);
|
m_bKillTimer = false;
|
}
|
|
if(m_nCommandReadDelay != LogSaveOption.m_nOptionCommandReadDelay)
|
{
|
//ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå..
|
m_bKillTimer = true;
|
Sleep(10);
|
//ŸÀ̸Ӹ¦ Á×À̰í..
|
KillTimer(READ_COMMAND);
|
m_nCommandReadDelay = LogSaveOption.m_nOptionCommandReadDelay;
|
//»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù.
|
SetTimer(READ_COMMAND,m_nCommandReadDelay,0);
|
m_bKillTimer = false;
|
}
|
|
|
if(m_nLogSaveDelay != LogSaveOption.m_nOptionLogSaveDelay)
|
{
|
//ŸÀ̸Ӹ¦ Á×À̱â Àü¿¡ º¸È£ÄÚµå..
|
m_bKillTimer = true;
|
Sleep(10);
|
//ŸÀ̸Ӹ¦ Á×À̰í..
|
KillTimer(SAVE_LOGFILE);
|
m_nLogSaveDelay = LogSaveOption.m_nOptionLogSaveDelay;
|
//»õ·Î ¼³Á¤µÈ ÁÖ±â·Î »õ·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù.
|
SetTimer(SAVE_LOGFILE,m_nLogSaveDelay,0);
|
m_bKillTimer = false;
|
}
|
}
|
}
|
|
void CLogViewView::ReadINIFile(void)
|
{
|
|
CString NameOfINIFile = _T("");
|
CString Path;
|
CString DefaultName = _T("DefaultLog");
|
GetModulePath(Path);
|
|
m_strDefaultPath = Path;
|
|
NameOfINIFile.Format(_T("%sLogView.ini"),Path);
|
|
//ȯ°æ¼³Á¤¿¡¼ ¸Þ¸ð¸®¸ÊÀ» Àоî¿À´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù.
|
m_nMemoryMapReadDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("MEMORYMAP_DERAY"),10,NameOfINIFile);
|
//ȯ°æ¼³Á¤¿¡¼ ¸Þ¸ð¸®¸ÊÀ» Àоî¿À´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù.
|
m_nCommandReadDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("COMMAND_DERAY"),1000,NameOfINIFile);
|
//ȯ°æ¼³Á¤¿¡¼ ·Î±×¸¦ ÀúÀåÇÏ´Â ÁֱⰪÀ» ºÒ·¯¿É´Ï´Ù.
|
m_nLogSaveDelay = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("LOGSAVE_DERAY"),1000,NameOfINIFile);
|
//ȯ°æ¼³Á¤¿¡¼ ·Î±×¸¦ ÀúÀåÇÏ´Â ·Î±×·¹º§°ªÀ» ºÒ·¯¿É´Ï´Ù.
|
m_nLogSaveLevel = GetPrivateProfileInt(_T("SAVE_OPTION"),_T("LOGSAVE_LEVEL"),4,NameOfINIFile);
|
//ȯ°æ¼³Á¤¿¡¼ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â °³¼ö¸¦ ºÒ·¯¿É´Ï´Ù.
|
m_nListPrintCount = GetPrivateProfileInt(_T("VIEW_OPTION"),_T("LIST_PRINTCOUNT"),100,NameOfINIFile);
|
//ȯ°æ¼³Á¤¿¡¼ ¸®½ºÆ®¿¡ Ãâ·ÂÇÏ´Â ·Î±×·¹º§°ªÀ» ºÒ·¯¿É´Ï´Ù.
|
m_nViewLevel = GetPrivateProfileInt(_T("VIEW_OPTION"),_T("LIST_VIEWLEVEL"),4,NameOfINIFile);
|
|
TCHAR LogPath[128] = {0};
|
TCHAR LogName[128] = {0};
|
CString TempStr = _T("");
|
CString strLogPath = _T("");
|
CString strLogName = _T("");
|
int LogID = -1;
|
for(int i = 0; i < LV_FCOUNT; i++)
|
{
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_ID%02d"),i);
|
LogID = GetPrivateProfileInt(_T("SAVE_OPTION"),((LPCTSTR)TempStr),-1,NameOfINIFile);
|
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_PATH%02d"),i);
|
//·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù.
|
::GetPrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), ((LPCTSTR)Path), (LPWSTR)LogPath,64,((LPCTSTR)NameOfINIFile));
|
strLogPath = _T("");
|
strLogPath.Format(_T("%s"),LogPath);
|
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_Name%02d"),i);
|
//·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù.
|
::GetPrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), ((LPCTSTR)DefaultName),(LPWSTR)LogName,64,((LPCTSTR)NameOfINIFile));
|
strLogName = _T("");
|
strLogName.Format(_T("%s"),LogName);
|
|
m_pPathData->InsertPathData(LogID, strLogName, strLogPath);
|
}
|
|
TCHAR MemoryMapName[128] = {0};
|
CString DefaultMapName = _T("LOGVIEW");
|
//·Î±× ÀúÀå °æ·Î¸¦ Àоî¿Â´Ù.
|
::GetPrivateProfileString(_T("SW_SETTING"),_T("MEMORYMAP_NAME"), ((LPCTSTR)DefaultMapName), MemoryMapName,64,((LPCTSTR)NameOfINIFile));
|
|
m_strMemoryMap.Format(_T("%s"),MemoryMapName);
|
}
|
|
void CLogViewView::SaveINIFile(void)
|
{
|
CString NameOfINIFile = _T("");
|
CString Path;
|
GetModulePath(Path);
|
NameOfINIFile.Format(_T("%sLogView.ini"),Path);
|
|
WritePrivateProfileString(_T("SW_SETTING"),_T("MEMORYMAP_NAME"), m_strMemoryMap,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ ¸Þ¸ð¸®¸ÊÀ» Àд Áֱ⸦ ÀúÀåÇÕ´Ï´Ù.
|
CString ValueOfSetting;
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nMemoryMapReadDelay);
|
WritePrivateProfileString(_T("SAVE_OPTION"),_T("MEMORYMAP_DERAY"),ValueOfSetting,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ Ä¿¸Çµå¸¦ Àд Áֱ⸦ ÀúÀåÇÕ´Ï´Ù.
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nCommandReadDelay);
|
WritePrivateProfileString(_T("SAVE_OPTION"),_T("COMMAND_DERAY"),ValueOfSetting,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ ·Î±×ÆÄÀÏÀ» ÀúÀåÇÏ´Â Áֱ⸦ ÀúÀåÇÕ´Ï´Ù.
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nLogSaveDelay);
|
WritePrivateProfileString(_T("SAVE_OPTION"),_T("LOGSAVE_DERAY"),ValueOfSetting,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ ·Î±×ÆÄÀÏ¿¡ ÀúÀåÇÒ ·Î±×·¹º§ °ªÀ» ÀúÀåÇÕ´Ï´Ù.
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nLogSaveLevel);
|
WritePrivateProfileString(_T("SAVE_OPTION"),_T("LOGSAVE_LEVEL"),ValueOfSetting,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ ¸®½ºÆ®ÄÁÆ®·Ñ¿¡ Ãâ·ÂÇÏ´Â °³¼ö¸¦ ÀúÀåÇÕ´Ï´Ù.
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nListPrintCount);
|
WritePrivateProfileString(_T("VIEW_OPTION"),_T("LIST_PRINTCOUNT"),ValueOfSetting,NameOfINIFile);
|
|
//ȯ°æ¼³Á¤¿¡¼ ¸®½ºÆ®¿¡ º¸¿©ÁÖ´Â ·Î±×·¹º§°ªÀ» ÀúÀåÇÕ´Ï´Ù.
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_nViewLevel);
|
WritePrivateProfileString(_T("VIEW_OPTION"),_T("LIST_VIEWLEVEL"),ValueOfSetting,NameOfINIFile);
|
|
CString TempStr;
|
CString strLogPath = _T("");
|
CString strLogName = _T("");
|
int LogID = -1;
|
for( int i = 0; i < LV_FCOUNT; i++)
|
{
|
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_ID%02d"),i);
|
|
ValueOfSetting = _T("");
|
ValueOfSetting.Format(_T("%d"),m_pPathData->GetIDFromIndex(i));
|
WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr),ValueOfSetting,NameOfINIFile);
|
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_PATH%02d"),i);
|
//·Î±×ÆÄÀÏ ÀúÀå °æ·Î ¼³Á¤
|
WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), m_pPathData->GetPathFromIndex(i),NameOfINIFile);
|
|
TempStr = _T("");
|
TempStr.Format(_T("LOG_Name%02d"),i);
|
//·Î±×ÆÄÀÏ ÀúÀå °æ·Î ¼³Á¤
|
WritePrivateProfileString(_T("SAVE_OPTION"),((LPCTSTR)TempStr), m_pPathData->GetNameFromIndex(i),NameOfINIFile);
|
}
|
}
|
|
unsigned int CLogViewView::GetProcessID(TCHAR* MemoryMapName)
|
{
|
//À̺¥Æ® °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© µ¿ÀÏÇÑ °øÀ¯¸Þ¸ð¸®¸¦ °¡Áø
|
//ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ´Â °ÍÀ» ¹æÁöÇÑ´Ù.
|
CString EventName = _T("");
|
unsigned int index = 0;
|
|
//À̺¥Æ® »ý¼º °³¼ö´Â 10°³ À̳»·Î ÁöÁ¤ÇÑ´Ù.
|
//for( index = 0; index < 1; index++)
|
{
|
EventName = _T("");
|
//EventName.Format(_T("%sEVENT%02d"),MemoryMapName,index);
|
EventName.Format(_T("%sEVENT"),MemoryMapName);
|
|
m_hDupCheck = ::CreateEvent(NULL, FALSE, FALSE, EventName);
|
|
if(::GetLastError() == ERROR_ALREADY_EXISTS)
|
{
|
//continue;
|
return 0xff;
|
}
|
else
|
return index;
|
}
|
//return 0xff;
|
}
|
|
//·Î±×View¿¡¼ ¸ÊÆÄÀÏ ÀúÀå
|
void CLogViewView::OnBnClickedButtonMapsave()
|
{
|
m_pLogManager->SaveBinary((TCHAR*)(LPCTSTR)m_strDefaultPath);
|
}
|
|
|
//ÇÑ´ÞÀÌ Áö³ ·Î±×ÆÄÀÏÀº »èÁ¦ÇÑ´Ù.
|
void CLogViewView::DeleteLog(void)
|
{
|
SYSTEMTIME st;
|
GetLocalTime(&st);
|
|
GetDeleteDay(st, 30);
|
//ÇÁ·Î¼¼½º ¾ÆÀ̵ð¿Í ³¯Â¥ÀÇ Á¶ÇÕÀ¸·Î ·Î±×ÆÄÀÏ »ý¼º
|
TCHAR strFileName[MAX_PATH];
|
|
for(int i = 0; i < LV_FCOUNT; i++)
|
{
|
memset(strFileName, 0x00, MAX_PATH*sizeof(TCHAR));
|
|
_stprintf_s(strFileName, _T("%s\\%s%02d_%d%02d%02d.log"),
|
m_pPathData->GetPathFromIndex(i),m_pPathData->GetNameFromIndex(i), st.wYear, st.wMonth, st.wDay);
|
|
DeleteFile(strFileName);
|
}
|
}
|
|
void CLogViewView::GetDeleteDay(SYSTEMTIME& Today, DWORD DiffDay)
|
{
|
DWORD DeleteDay = SystemToAbsDay(Today);
|
DeleteDay -= DiffDay;
|
|
AbsDayToSystemTime(DeleteDay, Today);
|
}
|
|
DWORD CLogViewView::SystemToAbsDay(SYSTEMTIME& st)
|
{
|
INT64 i64;
|
FILETIME fst;
|
|
st.wHour = 0;
|
st.wMinute = 0;
|
st.wMilliseconds = 0;
|
st.wSecond = 0;
|
st.wDayOfWeek = 0;
|
|
SystemTimeToFileTime(&st,&fst);
|
i64 = (((INT64)fst.dwHighDateTime) << 32) + fst.dwLowDateTime;
|
i64 = i64/864000000000;
|
|
return (DWORD)i64;
|
}
|
|
void CLogViewView::AbsDayToSystemTime(DWORD AbsDay, SYSTEMTIME& st)
|
{
|
INT64 i64;
|
FILETIME fst;
|
i64 = AbsDay*864000000000;
|
fst.dwHighDateTime = (DWORD)(i64>>32);
|
fst.dwLowDateTime = (DWORD)(i64&0xffffffff);
|
FileTimeToSystemTime(&fst,&st);
|
|
}
|
|
void CLogViewView::OnLogpathsetting()
|
{
|
// TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
/*
|
CString strSelectPath;
|
BROWSEINFO BInfo;
|
TCHAR szBuffer[512];
|
::ZeroMemory(&BInfo, sizeof(BROWSEINFO));
|
::ZeroMemory(szBuffer, 512);
|
|
BInfo.hwndOwner = GetSafeHwnd();
|
BInfo.lpszTitle = _T("°ü¸® Æú´õ¸¦ ¼±ÅÃÇϼ¼¿ä.");
|
BInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS;
|
LPITEMIDLIST pItemidList = ::SHBrowseForFolder(&BInfo);
|
if( pItemidList == NULL)
|
GetModulePath(m_strDefaultPath);
|
|
::SHGetPathFromIDList(pItemidList, szBuffer);
|
// m_strLogPath[0] = szBuffer;
|
// m_strLogPath[0] +=_T("\\");
|
*/
|
CPathSettingDlg PathSettingDlg;
|
|
PathSettingDlg.Init(m_pPathData);
|
|
//PathSettingDlg.InitList();
|
|
PathSettingDlg.DoModal();
|
|
}
|
bool CLogViewView::CheckDup(TCHAR* MemoryMapName)
|
{
|
//À̺¥Æ® °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© µ¿ÀÏÇÑ °øÀ¯¸Þ¸ð¸®¸¦ °¡Áø
|
//ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ´Â °ÍÀ» ¹æÁöÇÑ´Ù.
|
CString EventName = _T("");
|
unsigned int index = 0;
|
|
EventName = _T("");
|
EventName.Format(_T("%sEVENT"),MemoryMapName);
|
|
m_hDupCheck = ::CreateEvent(NULL, FALSE, FALSE, EventName);
|
|
if(::GetLastError() == ERROR_ALREADY_EXISTS)
|
{
|
//(_T("ÇÁ·Î±×·¥ÀÌ Áߺ¹½ÇÇà µÇ¾ú½À´Ï´Ù."));
|
return true;
|
}
|
return false;
|
}
|
|
void CLogViewView::OnCbnSelchangeComboLogid()
|
{
|
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
UpdateData();
|
|
m_ComboViewLastLogID = m_ComboViewLogID.GetCount();
|
m_ComboViewLastLogID -= 1;
|
}
|
|
void CLogViewView::OnSize(UINT nType, int cx, int cy)
|
{
|
CFormView::OnSize(nType, cx, cy);
|
|
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
if(m_ListLogViewer)
|
{
|
m_ListLogViewer.SetWindowPos(NULL, 0, 0, cx - 20, cy - 38, SWP_NOSENDCHANGING |
|
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
|
}
|
}
|