/*------------------------------------------------------------------------------ * SUNLogConsole.cpp *------------------------------------------------------------------------------ * *------------------------------------------------------------------------------ * All rights reserved by Jin Hye Jin (jiny7749@hotmail.com) **----------------------------------------------------------------------------*/ #include "stdafx.h" #include "SUNLogConsole.h" #include "LogMain.h" #include "DBHandler.h" #ifdef _DEBUG #define new DEBUG_NEW #endif LogMain g_SUNLogMain; DBHandler* g_pDBHandler; //using namespace std; int ArgumentParsing(TCHAR * szStart, TCHAR * szEnd, TCHAR * szServerIP, TCHAR * szPrefix); int ArgumentParsing_NEW(TCHAR * szStart, TCHAR * szEnd, TCHAR * szServerIP, TCHAR * szPrefix, INT& nWorld, TCHAR * logfilepath, TCHAR * txtfilepath, BOOL& is_restore); void SetArgValue(TCHAR * Argv, TCHAR * szIP, TCHAR * szPrefix); int IsDate(TCHAR * szDate); int IsInvalidDate(TCHAR * szDate); BOOL WINAPI CtrlHandler(DWORD fdwCtrlType); static unsigned int __stdcall LookoutThread(LPVOID lParam); /** ---------------------------------------------------------------------------- \brief main \param \return ------------------------------------------------------------------------------*/ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { if ( !AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0) ) { _tprintf(_T("½É°¢ÇÑ ¿À·ù: MFC¸¦ ÃʱâÈ­ÇÏÁö ¸øÇß½À´Ï´Ù.\n")); return 1; } else { SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE); int nSize = sizeof(DWORD); TCHAR szStart [MAX_PATH] = {0}; TCHAR szEnd [MAX_PATH] = {0}; TCHAR szServerIP[MAX_PATH] = {0}; TCHAR logfilepath[MAX_PATH] = {0}; TCHAR txtfilepath[MAX_PATH] = {0}; TCHAR szPrefix [15] = {0}; BOOL is_restore = FALSE; INT nWorld = 0; //if ( 0 != ArgumentParsing(szStart, szEnd, szServerIP, szPrefix) ) if ( 0 != ArgumentParsing_NEW(szStart, szEnd, szServerIP, szPrefix, nWorld, logfilepath, txtfilepath, is_restore) ) return FALSE; if ( 0 != g_SUNLogMain.Start(nWorld, szStart, szEnd, szServerIP, szPrefix, logfilepath, txtfilepath, is_restore) ) return FALSE; char chQuitKey; _tprintf(_T("\n==============================================")); _tprintf(_T("\nRunning Real Time LogMain")); _tprintf(_T("\nQuit Key(q)")); while(TRUE) { if( g_SUNLogMain.IsTimeSpanLog()) { //Á¤ÇØÁØ ¸ðµç ³¯Â¥°¡ ³¡³µ´ÂÁö¸¦ °Ë»çÇÏ´Â ½º·¹µå¸¦ »ý¼º!!! ¸ðµç ÀÛ¾÷ÀÌ ³¡³µ´Ù¸é // ¸Þ¼¼Áö¸¦ ¼ÛÃâ!!!!(»ç¿ëÀÚ°¡ q ÀÔ·ÂÀ» Çϵµ·Ï ÇØ¾ßÇÔ!!!) DWORD dwThreadID = 0; HANDLE hLookoutThread = (HANDLE)_beginthreadex(NULL, 0, LookoutThread, NULL, 0, (unsigned*)&dwThreadID); } _tprintf(_T("\nInput Key :")); chQuitKey = getchar(); if ( chQuitKey == _T('q') || chQuitKey == _T('Q')) { break; } Sleep(100); } g_SUNLogMain.Stop(); } return TRUE; } /** ---------------------------------------------------------------------------- \brief Console Control Handler \param \return ------------------------------------------------------------------------------*/ BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) { switch(fdwCtrlType) { case CTRL_C_EVENT: case CTRL_CLOSE_EVENT: case CTRL_BREAK_EVENT: case CTRL_LOGOFF_EVENT: case CTRL_SHUTDOWN_EVENT: default : printf("\nreceive SHOTDOWN Event"); printf("\nNow Exit Program~~!"); g_SUNLogMain.Stop(); return FALSE; } } /** ---------------------------------------------------------------------------- \brief ÇÁ·Î±×·¥ ¾Æ±Ô¸ÕÆ®·Î ³¯Â¥¸¦ ¹ÞÀ»¼ö ÀÖ´Ù. IPµµ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤ÇؾßÇÔ.. \param \return ------------------------------------------------------------------------------*/ int ArgumentParsing(TCHAR * szStart, TCHAR * szEnd, TCHAR * szServerIP, TCHAR * szPrefix) { int ret = 0; if ( __argc > 1 ) { if ( FAILED(StringCchCopy(szStart, MAX_PATH, (const TCHAR*)__argv[1])) ) { _ASSERTE(!"StringCchCopy fail"); ret = -1; } else if ( 0 != IsDate(szStart) ) { ret = -1; } else if ( __argc > 2) { if ( FAILED(StringCchCopy(szEnd, MAX_PATH, (const TCHAR*)__argv[2])) ) { _ASSERTE(!"StringCchCopy fail"); ret = -1; } else if ( 0 != IsDate(szEnd) ) { SetArgValue(szEnd, szServerIP, szPrefix); ZeroMemory(szEnd, MAX_PATH); } else if ( __argc > 3) { /* if (FAILED(StringCchCopy(szServerIP, MAX_PATH, (const TCHAR*)__argv[3]))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; } */ SetArgValue((TCHAR*)__argv[3], szServerIP, szPrefix); } } } if( __argc > 4) { SetArgValue((TCHAR*)__argv[4], szServerIP, szPrefix); } if ( 0 != ret ) { _tprintf(_T("Invalid Date!!!\n\n")); _tprintf(_T("Syntax: SUNLogConsole.exe [start date] [end date] [server IP]\n")); _tprintf(_T("(ex) SUNLogConsole.exe 20080101 20080101 10.1.1.1\n")); _tprintf(_T("(ex) SUNLogConsole.exe 20080101 20080102\n")); _tprintf(_T("(ex) SUNLogConsole.exe 20080101\n")); } return ret; } int ArgumentParsing_NEW(TCHAR * szStart, TCHAR * szEnd, TCHAR * szServerIP, TCHAR * szPrefix, INT& nWorld, TCHAR * logfilepath, TCHAR * txtfilepath, BOOL& is_restore) { int ret = 0; TCHAR *token; TCHAR seps[4]; TCHAR szCommand[MAX_PATH] = {0,}; TCHAR szModuleName[MAX_PATH] = {0,}; HANDLE hStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); StringCchCopy(seps, sizeof(seps), _T(" ")); StringCchCopy(szCommand, sizeof(szCommand), GetCommandLine()); ////////////////////////////////////////////////////////////////////////// // Å×½ºÆ®¸¦ À§ÇØ. //StringCchCat(szCommand, sizeof(szCommand), _T("-world 1 -start 20090318 -end 20090320")); ////////////////////////////////////////////////////////////////////////// TCHAR *szCommandLine = szCommand; GetModuleFileName( GetModuleHandle( NULL ), szModuleName, MAX_PATH ); //szCommandLine += _tcslen(szModuleName) + 2; ////////////////////////////////////////////////////////////////////// // ¿¬±¸°¡ ÇÊ¿ä!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // /* TCHAR* pSepChar = NULL; if(NULL != (pSepChar = _tcschr(szCommandLine, ' ')) && NULL != _tcsstr(szCommandLine, TIMESPAN_PROC_NAME)) { PrintUserColorString(hStdOut, USER_RED, _T("TimeSpan LogProcess")); szCommandLine = ++pSepChar; } else { PrintUserColorString(hStdOut, USER_RED, _T("REALTIME LogProcess")); // ¸®¾óŸÀÓ ·Î±×ÄÝ·ºÅÍÀÓ! szCommandLine += _tcslen(szModuleName) + 2; } */ token = _tcstok( szCommandLine, seps ); while( token != NULL ) { if(!_tcsicmp(token, _T("-world"))) { token = _tcstok( NULL, seps ); if(token == NULL) { PrintUserColorString(hStdOut, USER_WHITE, _T("-world Token NULL\n")); break; } nWorld = atoi(token); TCHAR szPrint[MAX_PATH]; if( nWorld <= 0 ) { StringCchPrintf(szPrint, sizeof(szPrint), _T("-world Token NOT Find : %d"), nWorld); PrintUserColorString(hStdOut, USER_RED, szPrint); nWorld = 0; } StringCchPrintf(szPrint, sizeof(szPrint), _T("-world Token Find : %d"), nWorld); PrintUserColorString(hStdOut, USER_WHITE, szPrint); } else if(!_tcsicmp(token, _T("-start"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; if ( 0 != IsDate(token) ) { ret = -1; break; } if(FAILED(StringCchCopy(szStart, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } } else if(!_tcsicmp(token, _T("-end"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; if ( 0 != IsDate(token) ) { ret = -1; break; } if(FAILED(StringCchCopy(szEnd, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } } else if(!_tcsicmp(token, _T("-ip"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; if(FAILED(StringCchCopy(szServerIP, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } } else if(!_tcsicmp(token, _T("-prefix"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; size_t len = 0; StringCchLength(token, MAX_PATH, &len); if(FAILED(StringCchCopy(szPrefix, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } for(int i = 0; i < (int)len; i++) { TCHAR cTmp = szPrefix[i]; if(0 == _istupper(cTmp)) { szPrefix[i] = _totupper(cTmp); } } } else if(!_tcsicmp(token, _T("-logfile"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; if(FAILED(StringCchCopy(logfilepath, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } } else if(!_tcsicmp(token, _T("-txtfile"))) { token = _tcstok( NULL, seps ); if(token == NULL) break; if(FAILED(StringCchCopy(txtfilepath, MAX_PATH, token))) { _ASSERTE(!"StringCchCopy fail"); ret = -1; break; } } else if(!_tcsicmp(token, _T("-restore"))) { is_restore = TRUE; } token = _tcstok( NULL, seps ); } return ret; } void SetArgValue(TCHAR * Argv, TCHAR * szIP, TCHAR * szPrefix) { size_t len = 0; int nCount = 0; StringCchLength(Argv, MAX_PATH, &len); for(int i = 0; i< (int)len; i++) { TCHAR cTmp = Argv[i]; if(cTmp == _T('.')) { //szContext[i] = '\"'; nCount++; } } if(nCount == 3) // IPÀÏ °æ¿ì { if ( FAILED(StringCchCopy(szIP, MAX_PATH, Argv)) ) { _ASSERTE(!"StringCchCopy fail"); } } else //Prefix(¼­¹ö±º)ÀÏ °æ¿ì { if ( FAILED(StringCchCopy(szPrefix, MAX_PATH, Argv)) ) { _ASSERTE(!"StringCchCopy fail"); } for(int i = 0; i < (int)len; i++) { TCHAR cTmp = szPrefix[i]; if(0 == _istupper(cTmp)) { szPrefix[i] = _totupper(cTmp); } } } } /** ---------------------------------------------------------------------------- \brief szDate°¡ 8ÀÚ¸® ¼ýÀÚ·Î µÈ ³¯Â¥ÀÎÁö üũÇÑ´Ù. \param szDate = "20080101" Çü½ÄÀÇ ³¯Â¥ \return ------------------------------------------------------------------------------*/ int IsDate(TCHAR * szDate) { if (NULL == szDate) { _ASSERTE(!"IsDate"); return -1; } if ( 8 == _tcslen(szDate) ) { for (int i = 0; i < 8; i++) { if ( szDate[i] < 48 || szDate[i] > 57 ) { return -1; } } return IsInvalidDate(szDate); } return -1; } int IsInvalidDate(TCHAR * szDate) { if (NULL == szDate) { _ASSERTE(!"IsInvalidDate"); return -1; } // 0 1 2 3 4 5 6 7 - index // 2 0 0 7 1 2 3 1 - date TCHAR szY[16] = {0}; TCHAR szM[16] = {0}; TCHAR szD[16] = {0}; int nY = 0, nM = 0, nD = 0; BOOL bNextM = FALSE; BOOL bYY = FALSE; szY[0] = szDate[0]; szY[1] = szDate[1]; szY[2] = szDate[2]; szY[3] = szDate[3]; szM[0] = szDate[4]; szM[1] = szDate[5]; szD[0] = szDate[6]; szD[1] = szDate[7]; nY = _ttoi(szY); nM = _ttoi(szM); nD = _ttoi(szD); if ( /*2008 > nY ||*/ 1 > nM || 12 < nM || 1 > nD ) { return -1; } if ( 2 == nM ) { if ( 0 == nY % 400 ) // À±³â { if ( 29 < nD ) return -1; } else if ( 0 == nY % 100 ) // Æò³â { if ( 28 < nD ) return -1; } else if ( 0 == nY % 4 ) // À±³â { if ( 29 < nD ) return -1; } else { if ( nD > 28 ) return -1; } } else if ( 4 == nM || 6 == nM || 9 == nM || 11 == nM ) // 30ÀÏÀÎ ´Þ { if ( 30 < nD ) return -1; } else { if ( 31 < nD ) return -1; } return 0; } static unsigned int __stdcall LookoutThread(LPVOID lParam) { g_SUNLogMain.LookoutProcess(); //_endthreadex(1); return 1; }