1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once
#include <windows.h>
 
#define LOG_FILE_PATH _T("C:\\LogFile\\")
 
#define MAX_STRING_SIZE 256        //UNICODE ±âÁØ
 
typedef struct _DITLOG {
    int nLogID;
    unsigned int nLevel;
    unsigned int nProcess;
    SYSTEMTIME nCurTime;
    TCHAR logMessage[MAX_STRING_SIZE];
} DITLOG,*PDITLOG;
 
 
#define ONE_LOG_SIZE sizeof(DITLOG)    //(level+¹®ÀÚ¿­*2) BYTE ±âÁØ
#define SHARED_LOG_COUNT 10000
#define DIT_MAP_SIZE    1024*64
 
 
//À妽º+¸í·ÉÇ÷¡±×+(level+¹®ÀÚ¿­)*Å¥°¹¼ö+(¸Ê»çÀÌÁî*64)
#define SHAREDMEM_SIZE    4+4+ONE_LOG_SIZE*SHARED_LOG_COUNT+DIT_MAP_SIZE
 
class AFX_EXT_CLASS CLogManager
{
    unsigned int m_nProcessID;
    int m_nLogID;
 
    HANDLE m_hFMap;
    //À妽º¿Í Ä¿¸Çµå¸¦ Á¦¿ÜÇÑ °øÀ¯¸Þ¸ð¸® ½ÃÀÛ Æ÷ÀÎÆ®
    char* m_pSharedMem;
 
    HANDLE m_csMemoryMap;
    CRITICAL_SECTION m_csLocalLogFile;
 
    //¾à 1000ÀÏ(3³â) »ç¿ë°¡´ÉÇÑ À妽º
    unsigned int* m_nIndex;
 
    unsigned char* m_Command1;    //mapÀúÀå Ç÷¡±×
 
    TCHAR m_TempLog[512];
 
public:
    unsigned int GetProcessID(){return m_nProcessID;};
    int GetLogID(){return m_nLogID;};
    void GetFirstCommand(unsigned char* pCommand);
    void SetFirstCommand(unsigned char Command);
    int GetIndex(){ return *m_nIndex;};
 
    void SetMapData(char* pData)
        {memcpy(m_pSharedMem+ONE_LOG_SIZE*SHARED_LOG_COUNT,pData,DIT_MAP_SIZE);};
 
    char* GetMapDataAddress(){ return m_pSharedMem+ONE_LOG_SIZE*SHARED_LOG_COUNT;};
 
    //°øÀ¯¸Þ¸ð¸®¿¡ ·Î±× ÀÛ¼º, ·Î±×·¹º§°ú ·Î±× ³»¿ë ÀÛ¼º
    void WriteLog( unsigned int Level, TCHAR* str,...);
    //·ÎÄàÇϵ忡 ·Î±× ÀÛ¼º
    void WriteLocalLog(TCHAR* str,...);
 
    //°øÀ¯¸Þ¸ð¸®ÀÇ ·Î±×¸¦ Àоî¿Â´Ù.
    void ReadLog(TCHAR* str, unsigned int curIndex, int* curLogID,
                unsigned int* curLevel,unsigned int* curProcess, PSYSTEMTIME curTime);
 
    CLogManager(int LogID, TCHAR* NameOfMemoryMap, unsigned int ProcessID = 0);//ProcessID ¿¹¾à¿µ¿ª
    ~CLogManager(void);
    void SaveBinary(TCHAR* FilePath);
};