Global.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include "StdAfx.h"
  2. #include "Global.h"
  3. #include "CritSection.h"
  4. #include <locale.h>
  5. namespace Global
  6. {
  7. TCHAR g_szModulePath[MAX_PATH] = _T(""); // 软件目录;
  8. TCHAR g_szModuleFileName[MAX_PATH] = _T(""); // 软件名称;
  9. TCHAR g_szConnectString[MAX_PATH] = _T(""); // DB连接串;
  10. // 服务器信息;
  11. TCHAR g_szDBSource[MAX_PATH] = _T(""); // 数据库源(服务所在IP或计算机名);
  12. TCHAR g_szDBSourcePort[MAX_PATH] = _T(""); // 数据库源端口;
  13. DWORD g_dwDBServerPort = 0; // 数据库源端口;
  14. TCHAR g_szDBAccount[MAX_PATH] = _T(""); // 数据库登录用户;
  15. TCHAR g_szDBPassWord[MAX_PATH] = _T(""); // 数据库登录密码;
  16. TCHAR g_szDBName[MAX_PATH] = _T(""); // 数据库名称;
  17. DWORD g_dwSvrPort = 0;
  18. DWORD g_dwDBPoolMaxCount = 1; // 数据库连接池最大对象数;
  19. DWORD g_dwDBPoolDef = 1; // 数据库连接池默认对象数;
  20. /************************************************************************/
  21. /* 函数:[5/20/2016 IT];
  22. /* 描述:;
  23. /* 参数:;
  24. /* [IN] :;
  25. /* [OUT] :;
  26. /* [IN/OUT] :;
  27. /* 返回:void;
  28. /* 注意:;
  29. /* 示例:;
  30. /*
  31. /* 修改:;
  32. /* 日期:;
  33. /* 内容:;
  34. /************************************************************************/
  35. int GetIniInfo(const TCHAR *szPath, const TCHAR *szIniName)
  36. {
  37. TCHAR szDrive[_MAX_DRIVE] = {0};
  38. TCHAR szDir[_MAX_DIR] = {0};
  39. TCHAR szFName[_MAX_FNAME] = {0};
  40. TCHAR szExt[_MAX_EXT] = {0};
  41. ::GetModuleFileName(NULL, g_szModulePath, sizeof(g_szModulePath) / sizeof(TCHAR));
  42. #ifndef VC70
  43. sprintf(g_szModulePath, _T("%s"), g_szModulePath);
  44. _tsplitpath(g_szModulePath, szDrive, szDir, szFName, szExt);
  45. strcpy(g_szModulePath, szDrive);
  46. strcat(g_szModulePath, szDir);
  47. TCHAR szIniPath[MAX_PATH] = {0};
  48. if (szPath != NULL && szIniName != NULL)
  49. sprintf(szIniPath, _T("%s%s"), szPath, szIniName);
  50. else
  51. sprintf(szIniPath, _T("%sServiceInfo.ini"), g_szModulePath);
  52. #else
  53. _stprintf_s(g_szModulePath, MAX_PATH, _T("%s"), g_szModulePath);
  54. _tsplitpath_s(g_szModulePath, szDrive, szDir, szFName, szExt);
  55. _tcscpy_s(g_szModulePath, szDrive);
  56. _tcscat_s(g_szModulePath, szDir);
  57. // -----------------------------------------------------//
  58. TCHAR szIniPath[MAX_PATH] = {0};
  59. if (szPath != NULL && szIniName != NULL)
  60. _stprintf_s(szIniPath, _T("%s%s"), szPath, szIniName);
  61. else
  62. _stprintf_s(szIniPath, _T("%sServiceInfo.ini"), g_szModulePath);
  63. #endif
  64. HANDLE hFile = CreateFile(szIniPath, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL);
  65. if (ERROR_FILE_NOT_FOUND == GetLastError())
  66. return -1;
  67. CloseHandle(hFile);
  68. // 获取服务器端信息;
  69. GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, szIniPath);
  70. g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, szIniPath);
  71. GetPrivateProfileString(_T("DatabaseInfo"), _T("dbAccount"), _T(""), g_szDBAccount, MAX_PATH, szIniPath);
  72. GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, szIniPath);
  73. GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, szIniPath);
  74. g_dwDBPoolMaxCount = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolMaxObj"), 1, szIniPath);
  75. g_dwDBPoolDef = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolDef"), 1, szIniPath);
  76. g_dwSvrPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 0, szIniPath);
  77. #ifndef VC70
  78. if (g_dwDBServerPort != 0)
  79. {
  80. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  81. sprintf(g_szConnectString, DB_SW_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort,g_szDBName);
  82. else
  83. sprintf(g_szConnectString, DB_SS_CONN_WITH_PORT,g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
  84. }
  85. else
  86. {
  87. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  88. sprintf(g_szConnectString, DB_SW_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName);
  89. else
  90. sprintf(g_szConnectString, DB_SS_CONN_WITHOUT_PORT,g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
  91. }
  92. #else
  93. if (g_dwDBServerPort != 0)
  94. {
  95. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  96. _stprintf_s(g_szConnectString, DB_SW_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort,g_szDBName);
  97. else
  98. _stprintf_s(g_szConnectString, DB_SS_CONN_WITH_PORT,g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
  99. }
  100. else
  101. {
  102. if ( _tcscmp(g_szDBAccount, _T("")) == 0 )
  103. _stprintf_s(g_szConnectString, DB_SW_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName);
  104. else
  105. _stprintf_s(g_szConnectString, DB_SS_CONN_WITHOUT_PORT,g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
  106. }
  107. #endif
  108. return 0;
  109. }
  110. /************************************************************************/
  111. /* 函数:WriteTextLog[7/28/2016 IT];
  112. /* 描述:写文本日志;
  113. /* 参数:;
  114. /* [IN] :;
  115. /* 返回:void;
  116. /* 注意:;
  117. /* 示例:;
  118. /*
  119. /* 修改:;
  120. /* 日期:;
  121. /* 内容:;
  122. /************************************************************************/
  123. void WriteTextLog(const TCHAR *format, ...)
  124. {
  125. try
  126. {
  127. static ThreadSection _critSection;
  128. AutoThreadSection aSection(&_critSection);
  129. // 解析出日志路径;
  130. TCHAR szlogpath[MAX_PATH] = {0};
  131. static TCHAR szModulePath[MAX_PATH] = {0};
  132. static TCHAR szFna[_MAX_DIR] = { 0 };
  133. if ( szModulePath[0] == _T('\0') )
  134. {
  135. TCHAR szDrive[_MAX_DRIVE] = { 0 };
  136. TCHAR szDir[_MAX_DIR] = { 0 };
  137. TCHAR szExt[_MAX_DIR] = { 0 };
  138. ::GetModuleFileName(NULL, szModulePath, sizeof(szModulePath) / sizeof(TCHAR));
  139. #ifndef VC70
  140. _tsplitpath(szModulePath, szDrive, szDir, szFna, szExt);
  141. strcpy(szModulePath, szDrive);
  142. strcat(szModulePath, szDir);
  143. #else
  144. _tsplitpath_s(szModulePath, szDrive, szDir, szFna, szExt);
  145. _tcscpy_s(szModulePath, szDrive);
  146. _tcscat_s(szModulePath, szDir);
  147. #endif
  148. }
  149. // 打开或创建文件;
  150. CStdioFile fp;
  151. if (PathFileExists(szlogpath))
  152. {
  153. if ( !fp.Open(szlogpath, CFile::modeWrite) )
  154. {
  155. return;
  156. }
  157. fp.SeekToEnd();
  158. }
  159. else
  160. {
  161. if ( !fp.Open(szlogpath, CFile::modeCreate | CFile::modeWrite) )
  162. return;
  163. }
  164. // 格式化前设置语言区域;
  165. TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
  166. _tsetlocale(LC_CTYPE, _T("chs"));//设定中文;
  167. // 格式化日志内容;
  168. va_list args = NULL;
  169. int len = 0;
  170. #ifndef VC70
  171. static TCHAR buffer[8192] = {0};
  172. va_start( args, format );
  173. memset(buffer, 0, 8192);
  174. vsprintf( buffer, format, args ); // C4996
  175. // 将日志内容输入到文件中;
  176. fp.WriteString( CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S ")) );
  177. fp.WriteString(buffer);
  178. fp.WriteString(_T("\n"));
  179. #else
  180. TCHAR *buffer = NULL;
  181. va_start( args, format );
  182. // _vscprintf doesn't count. terminating '\0'
  183. len = _vsctprintf_p( format, args );
  184. if ( len == -1 )
  185. {
  186. goto clear;
  187. }
  188. len++;
  189. buffer = (TCHAR*)malloc( len * sizeof(TCHAR) );
  190. _vstprintf_s( buffer, len, format, args ); // C4996
  191. // Note: vsprintf is deprecated; consider using vsprintf_s instead
  192. // 将日志内容输入到文件中;
  193. #ifndef _DEBUG
  194. fp.WriteString( CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S ")) );
  195. #else
  196. fp.WriteString( CTime::GetCurrentTime().Format(_T("%Y-%m-%d ")) );
  197. #endif
  198. fp.WriteString(buffer);
  199. fp.WriteString(_T("\n"));
  200. free( buffer );
  201. #endif
  202. // 关闭文件,释放资源并设置回原语言区域;
  203. //free( buffer );
  204. clear:
  205. _tsetlocale(LC_CTYPE, old_locale);
  206. free(old_locale);//还原区域设定;
  207. fp.Close();
  208. }
  209. catch (CException *e)
  210. {
  211. e->ReportError();
  212. e->Delete();
  213. }
  214. }
  215. };