#include "StdAfx.h" #include "DisplayMessage.h" CDisplayMessage::CDisplayMessage(const CString& strPath) { m_pDM2P = NULL; m_pFileLog = NULL; SetPath(strPath); // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD START DWORD dwThreadId = 0; HANDLE hThread = CreateThread(NULL, 0, RunThreadDisplayLog, NULL, 0, &dwThreadId); m_ThreadId = dwThreadId; // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END InitializeCriticalSection(&m_csLog); } CDisplayMessage::~CDisplayMessage(void) { if (m_pFileLog) { delete m_pFileLog; m_pFileLog = NULL; } PostThreadMessage(m_ThreadId, WM_QUIT, 0, 0); DeleteCriticalSection(&m_csLog); } void CDisplayMessage::SetPath(const CString& strPath) { m_strLogPath = strPath; CreateDirectory(m_strLogPath, NULL); MakeLogFile(); } BOOL CDisplayMessage::MakeLogFile() { // Log 처리 if (m_strLogPath.IsEmpty()) return FALSE; m_TimeLogFile = CTime::GetCurrentTime(); m_strLogFile.Format(_T("%s\\%04d-%02d-%02d.log"), m_strLogPath, m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay()); if (m_pFileLog) { delete m_pFileLog; m_pFileLog = NULL; } m_pFileLog = new CFile(); return TRUE; } // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD START void CDisplayMessage::DisplayMessage(const CString& strMessage) { // WriteToFile(strMessage); // // if(m_pDM2P) // { // m_pDM2P->DM2P_DisplayMessage(strMessage); // } CString* pstrLog = new CString(strMessage); PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast(pstrLog), 0); } // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD START void CDisplayMessage::DisplayMessage(const TCHAR* lpstrFormat, ...) { va_list list; TCHAR strText[2000] = {0}; try { va_start(list, lpstrFormat); _vstprintf_s(strText, lpstrFormat, list); va_end(list); CString* pstrLog = new CString(strText); PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast(pstrLog), 0); } catch (...) { return; } // WriteToFile(strText); // // if(m_pDM2P) // { // m_pDM2P->DM2P_DisplayMessage(strText); // } } // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD START void CDisplayMessage::ThreadDisplayMessage(const CString& strMessage) { WriteToFile(strMessage); if (m_pDM2P) { m_pDM2P->DM2P_DisplayMessage(strMessage); } } BOOL CDisplayMessage::WriteToFile(const CString& strMessage) { if(m_pFileLog == NULL) return FALSE; //EnterCriticalSection(&m_csLog); CTime time = CTime::GetCurrentTime(); CString strTimeStamp = _T(""); // 날짜가 바뀌면 파일명을 갱신해서 쓴다. if ((time.GetMonth() != m_TimeLogFile.GetMonth()) || (time.GetDay() != m_TimeLogFile.GetDay()) || !m_pFileLog) MakeLogFile(); if (m_pFileLog->Open(m_strLogFile, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::shareDenyNone )) { // 유니코드 파일의 시작은 BOM(0xFEFF) 이어야 한다. TCHAR strCommand = 0xFEFF; CString strLog = _T(""); //strTimeStamp.Format(_T("[%02d:%02d:%02d]"), time.GetHour(), time.GetMinute(), time.GetSecond()); strTimeStamp.Format(_T("[%02d:%02d:%02d:%02d:%02d:%02d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); #ifdef UNICODE strLog.Format(_T("%c%s %s\r\n"), strCommand, strTimeStamp, strMessage); #else strLog.Format(_T("%s %s\r\n"), strTimeStamp, strMessage); #endif m_pFileLog->SeekToEnd(); m_pFileLog->Write(strLog.GetBuffer(0), strLog.GetLength() * sizeof(TCHAR)); strLog.ReleaseBuffer(); m_pFileLog->Close(); } //LeaveCriticalSection(&m_csLog); return TRUE; } DWORD RunThreadDisplayLog(LPVOID param) { MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { CString* pstrLog = reinterpret_cast(msg.wParam); switch (msg.message) { case WM_DIPLAY_LOG: g_pLog->ThreadDisplayMessage(*pstrLog); delete pstrLog; break; default: break; } } return 0; } // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END