DBSvr.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:8k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // DBSvr.cpp : Defines the entry point for the application.
  2. //
  3. #include "stdafx.h"
  4. #include "../def/dbmgr.h"
  5. #include "TableList.h"
  6. #define _BMP_CX 16
  7. #define _BMP_CY 16
  8. // **************************************************************************************
  9. BOOL InitApplication(HANDLE hInstance);
  10. BOOL InitInstance(HANDLE hInstance, int nCmdShow);
  11. LPARAM APIENTRY MainWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);
  12. BOOL jRegSetKey(LPCTSTR pSubKeyName, LPCTSTR pValueName, DWORD dwFlags, LPBYTE pValue, DWORD nValueSize);
  13. BOOL jRegGetKey(LPCTSTR pSubKeyName, LPCTSTR pValueName, LPBYTE pValue);
  14. BOOL CALLBACK ConfigDlgFunc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  15. void CreateConfigProperties();
  16. // **************************************************************************************
  17. //
  18. // Global Variables Definition
  19. //
  20. // **************************************************************************************
  21. HINSTANCE g_hInst = NULL; // Application instance
  22. HWND g_hMainWnd = NULL; // Main window handle
  23. HWND g_hLogMsgWnd = NULL;
  24. HWND g_hToolBar = NULL;
  25. HWND g_hStatusBar = NULL;
  26. static WSADATA g_wsd;
  27. TBBUTTON tbButtons[] = 
  28. {
  29. { 0, IDM_STARTSERVICE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
  30. { 1, IDM_STOPSERVICE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}
  31. };
  32. // **************************************************************************************
  33. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  34. {
  35.     MSG msg;
  36. // if (CheckAvailableIOCP())
  37. // {
  38. if (!InitApplication(hInstance))
  39. return (FALSE);
  40. if (!InitInstance(hInstance, nCmdShow))
  41. return (FALSE);
  42. while (GetMessage(&msg, NULL, 0, 0))
  43. {
  44. TranslateMessage(&msg);
  45. DispatchMessage(&msg);
  46. }
  47. /* }
  48. else
  49. {
  50. TCHAR szMsg[1024];
  51. LoadString(hInstance, IDS_NOTWINNT, szMsg, sizeof(szMsg));
  52. MessageBox(NULL, szMsg, _LOGINGATE_SERVER_TITLE, MB_OK|MB_ICONINFORMATION);
  53. return -1;
  54. }
  55. */
  56.     return (msg.wParam);
  57. }
  58. // **************************************************************************************
  59. //
  60. //
  61. //
  62. // **************************************************************************************
  63. BOOL InitApplication(HANDLE hInstance)
  64. {
  65.     WNDCLASS  wc;
  66.     wc.style            = CS_GLOBALCLASS|CS_HREDRAW|CS_VREDRAW;
  67.     wc.lpfnWndProc      = (WNDPROC)MainWndProc;
  68.     wc.cbClsExtra       = 0;
  69.     wc.cbWndExtra       = 0;
  70.     wc.hIcon            = LoadIcon((HINSTANCE)hInstance, MAKEINTRESOURCE(IDI_MIR2));
  71.     wc.hInstance        = (HINSTANCE)hInstance;
  72.     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
  73.     wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW + 1);
  74.     wc.lpszMenuName     = MAKEINTRESOURCE(IDR_MAINMENU);
  75.     wc.lpszClassName    = _DB_SERVER_CLASS;
  76. return RegisterClass(&wc);
  77. }
  78. // **************************************************************************************
  79. //
  80. //
  81. //
  82. // **************************************************************************************
  83. BOOL InitInstance(HANDLE hInstance, int nCmdShow)
  84. {
  85. g_hInst = (HINSTANCE)hInstance;
  86. OleInitialize(NULL);
  87. INITCOMMONCONTROLSEX icex;
  88. icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  89. icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_BAR_CLASSES | ICC_INTERNET_CLASSES | ICC_TAB_CLASSES;
  90. InitCommonControlsEx(&icex);
  91.     g_hMainWnd = CreateWindowEx(0, _DB_SERVER_CLASS, _DB_SERVER_TITLE, 
  92. WS_OVERLAPPEDWINDOW|WS_VISIBLE,
  93. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,                 
  94. NULL, NULL, (HINSTANCE)hInstance, NULL);
  95. g_hToolBar = CreateToolbarEx(g_hMainWnd, WS_CHILD|CCS_TOP|WS_VISIBLE|WS_BORDER,
  96. _IDW_TOOLBAR, sizeof(tbButtons) / sizeof(TBBUTTON), (HINSTANCE)hInstance, IDB_TOOLBAR,
  97. (LPCTBBUTTON)&tbButtons, sizeof(tbButtons) / sizeof(TBBUTTON),
  98. _BMP_CX, _BMP_CY, _BMP_CX, _BMP_CY, sizeof(TBBUTTON));
  99. RECT rcMainWnd, rcToolBar, rcStatusBar;
  100. GetClientRect(g_hMainWnd, &rcMainWnd);
  101. GetWindowRect(g_hToolBar, &rcToolBar);
  102. g_hStatusBar = CreateWindowEx(0L, STATUSCLASSNAME, _T(""), WS_CHILD|WS_BORDER|WS_VISIBLE|SBS_SIZEGRIP,
  103. 0, rcMainWnd.bottom - _STATUS_HEIGHT, (rcMainWnd.right - rcMainWnd.left), _STATUS_HEIGHT, g_hMainWnd, (HMENU)_IDW_STATUSBAR, g_hInst, NULL);
  104. int nStatusPartsWidths[_NUMOFMAX_STATUS_PARTS];
  105. int nCnt = 0;
  106. for (int i = _NUMOFMAX_STATUS_PARTS - 1; i >= 0; i--)
  107. nStatusPartsWidths[nCnt++] = (rcMainWnd.right - rcMainWnd.left) - (90 * i);
  108. SendMessage(g_hStatusBar, SB_SETPARTS, _NUMOFMAX_STATUS_PARTS, (LPARAM)nStatusPartsWidths);
  109. SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(1, 0), (LPARAM)_T("Not Connected"));
  110. GetWindowRect(g_hStatusBar, &rcStatusBar);
  111.     g_hLogMsgWnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _TEXT(""), 
  112. WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS,
  113. 0, (rcToolBar.bottom - rcToolBar.top) - 2, (rcMainWnd.right - rcMainWnd.left), 
  114. (rcMainWnd.bottom - rcMainWnd.top) - (rcToolBar.bottom - rcToolBar.top)- (rcStatusBar.bottom - rcStatusBar.top) + 2,
  115. g_hMainWnd, NULL, (HINSTANCE)hInstance, NULL);
  116. ListView_SetExtendedListViewStyleEx(g_hLogMsgWnd, 0, LVS_EX_FULLROWSELECT);
  117. LV_COLUMN lvc;
  118. TCHAR szText[64];
  119. lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
  120. lvc.fmt = LVCFMT_LEFT;
  121. lvc.cx = 100;
  122. lvc.pszText = szText;
  123. for (i = 0; i < 3; i++)
  124. {
  125. lvc.iSubItem = i;
  126. LoadString((HINSTANCE)hInstance, IDS_LVS_LABEL1 + i, szText, sizeof(szText));
  127. ListView_InsertColumn(g_hLogMsgWnd, i, &lvc);
  128. }
  129. ListView_SetColumnWidth( g_hLogMsgWnd, 2, 500 );
  130. SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STOPSERVICE, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
  131. ShowWindow(g_hMainWnd, SW_SHOW);
  132. UpdateWindow(g_hMainWnd);
  133. if (WSAStartup(MAKEWORD(2, 2), &g_wsd) != 0)
  134. return (FALSE);
  135. BYTE btInstalled;
  136. if (!jRegGetKey(_DB_SERVER_REGISTRY, _TEXT("Installed"), (LPBYTE)&btInstalled))
  137. DialogBox(g_hInst, MAKEINTRESOURCE(IDD_CONFIGDLG), NULL, (DLGPROC)ConfigDlgFunc);
  138. TCHAR wszDatabase[256];
  139. char szDatabase[256];
  140. jRegGetKey(_DB_SERVER_REGISTRY, _TEXT("Device"), (LPBYTE)wszDatabase);
  141. WideCharToMultiByte(CP_ACP, 0, wszDatabase, -1, szDatabase, sizeof(szDatabase), NULL, NULL);
  142. GetDBManager()->Init( InsertLogMsg, szDatabase, "sa", "prg" );
  143. // 抛捞喉 佬扁
  144. CConnection *pConn = GetDBManager()->m_dbMain.CreateConnection( "Mir2_Common", "sa", "prg" );
  145. if ( pConn )
  146. {
  147. if ( !GetTblStartPoint()->Init( pConn ) )
  148. InsertLogMsg( _T("failed to read TBL_STARTPOINT tablen") );
  149. }
  150. GetDBManager()->m_dbMain.DestroyConnection( pConn );
  151. return TRUE;
  152. }
  153. // **************************************************************************************
  154. //
  155. //
  156. //
  157. // **************************************************************************************
  158. int AddNewLogMsg()
  159. {
  160. LV_ITEM lvi;
  161. TCHAR szText[64];
  162. int nCount = ListView_GetItemCount(g_hLogMsgWnd);
  163. if (nCount >= 50)
  164. {
  165. ListView_DeleteItem(g_hLogMsgWnd, 0);
  166. nCount--;
  167. }
  168. lvi.mask = LVIF_TEXT;
  169. lvi.iItem = nCount;
  170. lvi.iSubItem = 0;
  171. _tstrdate(szText);
  172. lvi.pszText = szText;
  173. ListView_InsertItem(g_hLogMsgWnd, &lvi);
  174. _tstrtime(szText);
  175. ListView_SetItemText(g_hLogMsgWnd, nCount, 1, szText);
  176. return nCount;
  177. }
  178. void InsertLogMsg(UINT nID)
  179. {
  180. TCHAR szText[256];
  181. int nCount = AddNewLogMsg();
  182. LoadString(g_hInst, nID, szText, sizeof(szText)/sizeof(TCHAR));
  183. if (lstrlen(szText) <= 256)
  184. {
  185. ListView_SetItemText(g_hLogMsgWnd, nCount, 2, szText);
  186. ListView_Scroll(g_hLogMsgWnd, 0, 8);
  187. }
  188. }
  189. void InsertLogMsg(LPTSTR lpszMsg)
  190. {
  191. int nCount = AddNewLogMsg();
  192. if (lstrlen(lpszMsg) <= 256)
  193. {
  194. ListView_SetItemText(g_hLogMsgWnd, nCount, 2, lpszMsg);
  195. ListView_Scroll(g_hLogMsgWnd, 0, 8);
  196. }
  197. }
  198. void InsertLogMsgParam(UINT nID, void *pParam, BYTE btFlags)
  199. {
  200. TCHAR szText[128];
  201. TCHAR szMsg[256];
  202. int nCount = AddNewLogMsg();
  203. LoadString(g_hInst, nID, szText, sizeof(szText)/sizeof(TCHAR));
  204. switch (btFlags)
  205. {
  206. case LOGPARAM_STR:
  207. _stprintf(szMsg, szText, (LPTSTR)pParam);
  208. break;
  209. case LOGPARAM_INT:
  210. _stprintf(szMsg, szText, *(int *)pParam);
  211. break;
  212. }
  213. if (lstrlen(szMsg) <= 256)
  214. {
  215. ListView_SetItemText(g_hLogMsgWnd, nCount, 2, szMsg);
  216. ListView_Scroll(g_hLogMsgWnd, 0, 8);
  217. }
  218. }