dce8af93633b27c02daf681a329d26f201fd2c0e
[matthijs/ABM2.git] / ABM2 / Engine / Log.cpp
1 // Log.cpp: implementation of the CLog class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #include "engine.h"\r
6 #include "Log.h"\r
7 \r
8 //////////////////////////////////////////////////////////////////////\r
9 // Construction/Destruction\r
10 //////////////////////////////////////////////////////////////////////\r
11 \r
12 /*\r
13 CMMPointer< CSettingVariable<std::string> > CLog::appLogName=0;\r
14 CMMPointer< CSettingVariable<std::string> > CLog::clientLogName=0;\r
15 CMMPointer< CSettingVariable<std::string> > CLog::serverLogName=0;\r
16 */\r
17 \r
18 CLog::CLog()\r
19 {\r
20 \r
21 }\r
22 \r
23 CLog &CLog::Get()\r
24 {\r
25         static CLog log;\r
26         return log;\r
27 }\r
28 \r
29 bool CLog::Init()\r
30 {\r
31         appLog.open("applog.txt");\r
32         clientLog.open("clntlog.txt");\r
33         serverLog.open("srvrlog.txt");\r
34         //user errors get logged to client\r
35 \r
36         //load the strings file\r
37         if(!LoadStrings())return false;\r
38 \r
39         return true;\r
40 }\r
41 \r
42 void CLog::Write(int target, const char *msg, ...)\r
43 {\r
44         va_list args; va_start(args,msg);\r
45         char szBuf[1024];\r
46         vsprintf_s(szBuf,1024,msg,args);\r
47 \r
48         if(target&LOG_APP)\r
49         {\r
50                 appLog<<szBuf<<"\n";\r
51 #ifdef _DEBUG\r
52                 appLog.flush();\r
53 #endif\r
54         }\r
55         if(target&LOG_CLIENT)\r
56         {\r
57                 clientLog<<szBuf<<"\n";\r
58 #ifdef _DEBUG\r
59                 clientLog.flush();\r
60 #endif\r
61         }\r
62         if(target&LOG_SERVER)\r
63         {\r
64                 serverLog<<szBuf<<"\n";\r
65 #ifdef _DEBUG\r
66                 serverLog.flush();\r
67 #endif\r
68         }\r
69         if(target&LOG_USER)\r
70         {\r
71 #ifdef WIN32\r
72                 MessageBox(NULL,(LPCTSTR)szBuf,L"Message",MB_OK);\r
73 #else\r
74 #error User-level logging is not implemented for this platform.\r
75 #endif\r
76         }\r
77         va_end(args);\r
78 }\r
79 \r
80 void CLog::Write(int target, unsigned long msgID, ...)\r
81 {\r
82         va_list args; va_start(args, msgID);\r
83         char szBuf[1024];\r
84         vsprintf_s(szBuf,1024,logStrings[msgID].c_str(),args);\r
85         Write(target,szBuf);\r
86         va_end(args);\r
87 }\r
88 /*\r
89 #ifdef WIN32\r
90 //under Win32, the strings get read in from a string table resource\r
91 bool CLog::LoadStrings()\r
92 {\r
93         for(unsigned long i=0;i<MAX_LOG_STRINGS;i++)\r
94         {\r
95                 char szBuf[1024];\r
96                 if(!LoadString(GetModuleHandle(L"engine"),i,(LPTSTR)szBuf,1024))break; //returning 0 means no more strings\r
97                 logStrings[i]=szBuf;\r
98         }\r
99         return true;\r
100 }\r
101 \r
102 #else\r
103 *///other platforms load the strings in from strings.txt\r
104 bool CLog::LoadStrings()\r
105 {\r
106         std::ifstream in("strings.txt");\r
107         if(!in.is_open())return false;\r
108 \r
109         unsigned long index=0;\r
110 \r
111         while(!in.eof())\r
112         {\r
113                 char szBuf[1024];\r
114                 in.getline(szBuf,1024);\r
115                 logStrings[index++]=szBuf;\r
116         }\r
117 \r
118         return true;\r
119 }\r
120 \r
121 //#endif\r