Environment.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:9k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "StdAfx.h"
  2. #include "resource.h"
  3. #include "Environment.h"
  4. #include "Utils.h"
  5. #include "IniFile.h"
  6. #include "Macro.h"
  7. #include <Commdlg.h>
  8. /*
  9.  * macro define
  10.  */
  11. #define KEY_BUFFER 100
  12. /*
  13.  * const variable
  14.  */
  15. const int g_nDefaultPlayerMaxAt = 5000;
  16. const int g_nDefaultPrecision = 10;
  17. const LPCTSTR g_szDefaultSetupFile = "mgwcfg.ini";
  18. /*
  19.  * library functions
  20.  */
  21. using OnlineGameLib::Win32::GetAppFullPath;
  22. using OnlineGameLib::Win32::GetFileVersion;
  23. using OnlineGameLib::Win32::GetLocalName;
  24. using OnlineGameLib::Win32::GetLocalAddress;
  25. using OnlineGameLib::Win32::CIniFile;
  26. static CIniFile g_theConfigFile;
  27. ENVIRONMENT g_theEnviroment;
  28. #define WSA_VERSION  MAKEWORD(2,0)
  29. /*
  30.  * Function helper
  31.  */
  32. bool InitSetupDlg( HWND hDlg );
  33. void DestroySetupDlg( HWND hDlg );
  34. void OpenSetupFile( HWND hDlg );
  35. /*
  36.  * Mesage handler for init-box.
  37.  */
  38. LRESULT CALLBACK DlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
  39. {
  40. switch (message)
  41. {
  42. case WM_INITDIALOG:
  43. return InitSetupDlg( hDlg );
  44. break;
  45. case WM_COMMAND:
  46. switch ( LOWORD( wParam ) )
  47. {
  48. case IDOK:
  49. case IDCANCEL:
  50. EnableWindow( GetDlgItem( hDlg, IDOK ), FALSE );
  51. EnableWindow( GetDlgItem( hDlg, IDCANCEL ), FALSE );
  52. EndDialog( hDlg, LOWORD( wParam ) );
  53. break;
  54. case IDC_BTN_SETUPFILEPATH:
  55. OpenSetupFile( hDlg );
  56. break;
  57. default:
  58. return FALSE;
  59. break;
  60. }
  61. return TRUE;
  62. break;
  63. case WM_DESTROY:
  64. DestroySetupDlg( hDlg );
  65. return TRUE;
  66. break;
  67. }
  68.     return FALSE;
  69. }
  70. bool LoadEnvironmentVariable( HINSTANCE hParentInst )
  71. {
  72. WSADATA WSAData = { 0 };
  73. if ( 0 != ::WSAStartup( WSA_VERSION, &WSAData ) )
  74. {
  75. /*
  76.  * Tell the user that we could not find a usable
  77.  * WinSock DLL.
  78.  */
  79. if ( LOBYTE( WSAData.wVersion ) != LOBYTE(WSA_VERSION) ||
  80.  HIBYTE( WSAData.wVersion ) != HIBYTE(WSA_VERSION) )
  81. {
  82.  ::MessageBox( NULL, _T(" Incorrect version of Winsock.dll found" ), _T( "Error" ), MB_OK );
  83. }
  84. ::WSACleanup();
  85. return false;
  86. }
  87. g_theEnviroment.sApplicationPath = GetAppFullPath( hParentInst );
  88. char szIniFile[MAX_PATH];
  89. sprintf( szIniFile, "%s%s", g_theEnviroment.sApplicationPath.c_str(), g_szDefaultSetupFile );
  90. g_theConfigFile.SetFile( szIniFile );
  91. /*
  92.  * Load infomation from ini-file
  93.  */
  94. g_theEnviroment.lnPlayerMaxCount = 
  95. g_theConfigFile.ReadInteger( "SYSTEM", "PlayerMaxAt", g_nDefaultPlayerMaxAt );
  96. g_theEnviroment.lnPrecision =
  97. g_theConfigFile.ReadInteger( "SYSTEM", "Precision", g_nDefaultPrecision );
  98. g_theConfigFile.ReadString( "SETUP",
  99. "SetupFile",
  100. g_theEnviroment.szConfigFileName, 
  101. sizeof( g_theEnviroment.szConfigFileName ),
  102. g_szDefaultSetupFile );
  103. g_theEnviroment.sAccountServerIP.resize( KEY_BUFFER );
  104. g_theConfigFile.ReadString( "NETWORK", "AccountSvrIP", 
  105. const_cast< LPTSTR >( g_theEnviroment.sAccountServerIP.c_str() ), KEY_BUFFER, NULL );
  106. g_theEnviroment.sRoleDBServerIP.resize( KEY_BUFFER );
  107. g_theConfigFile.ReadString( "NETWORK", "RoleDBSvrIP", 
  108. const_cast< LPTSTR >( g_theEnviroment.sRoleDBServerIP.c_str() ), KEY_BUFFER, NULL );
  109. g_theEnviroment.usAccSvrPort = g_theConfigFile.ReadInteger( "NETWORK", "AccountSvrPort", 5000 );
  110. g_theEnviroment.usRoleDBSvrPort = g_theConfigFile.ReadInteger( "NETWORK", "RoleDBSvrPort", 5000 );
  111. g_theEnviroment.usClientOpenPort = g_theConfigFile.ReadInteger( "NETWORK", "ClientOpenPort", 5000 );
  112. g_theEnviroment.usGameSvrOpenPort = g_theConfigFile.ReadInteger( "NETWORK", "GameSvrOpenPort", 5000 );
  113. /*
  114.  * Eject a dialog is used to initialize some variable.
  115.  */
  116. if ( IDCANCEL == DialogBox( hParentInst, (LPCTSTR)IDD_INITBOX, NULL, (DLGPROC)DlgProc ) )
  117. {
  118. return false;
  119. }
  120. /*
  121.  * Init information for a new player 
  122.  */
  123. ZeroMemory( g_theEnviroment.theRoleData, sizeof( TRoleData ) * NEW_PLAYER_KIND );
  124. for ( int i=0; i<10; i++ )
  125. {
  126. sprintf( szIniFile, "%ssetting\newplayerini%2.2d.ini", g_theEnviroment.sApplicationPath.c_str(), i );
  127. CIniFile iniFile( szIniFile );
  128. TRoleData *pRoleData = &g_theEnviroment.theRoleData[i];
  129. ASSERT( pRoleData );
  130. //pRoleData->BaseInfo
  131. }
  132. return true;
  133. }
  134. bool SaveEnvironmentVariable()
  135. {
  136. g_theConfigFile.WriteInteger( "SYSTEM", "PlayerMaxAt", g_theEnviroment.lnPlayerMaxCount );
  137. g_theConfigFile.WriteInteger( "SYSTEM", "Precision", g_theEnviroment.lnPrecision );
  138. g_theConfigFile.WriteString( "SETUP", "SetupFile", ( LPCTSTR )g_theEnviroment.szConfigFileName );
  139. g_theConfigFile.WriteString( "NETWORK", "AccountSvrIP", g_theEnviroment.sAccountServerIP.c_str() );
  140. g_theConfigFile.WriteString( "NETWORK", "RoleDBSvrIP", g_theEnviroment.sRoleDBServerIP.c_str() );
  141. g_theConfigFile.WriteInteger( "NETWORK", "AccountSvrPort", g_theEnviroment.usAccSvrPort );
  142. g_theConfigFile.WriteInteger( "NETWORK", "RoleDBSvrPort", g_theEnviroment.usRoleDBSvrPort );
  143. g_theConfigFile.WriteInteger( "NETWORK", "ClientOpenPort", g_theEnviroment.usClientOpenPort );
  144. g_theConfigFile.WriteInteger( "NETWORK", "GameSvrOpenPort", g_theEnviroment.usGameSvrOpenPort );
  145. ::WSACleanup();
  146. return true;
  147. }
  148. bool InitSetupDlg( HWND hDlg )
  149. {
  150. ::SetDlgItemInt( hDlg, IDC_EDIT_MAXAT, g_theEnviroment.lnPlayerMaxCount, FALSE );
  151. ::SetDlgItemInt( hDlg, IDC_EDIT_PRECISION, g_theEnviroment.lnPrecision, FALSE );
  152. ::SetDlgItemText( hDlg, IDC_SETUPFILEPATH, g_theEnviroment.szConfigFileName );
  153. ::SetDlgItemText( hDlg, IDC_EDIT_PRODUCTVERSION, GetFileVersion().c_str() );
  154. g_theEnviroment.sLocalName.resize( KEY_BUFFER );
  155. if ( GetLocalName( const_cast< LPTSTR >( g_theEnviroment.sLocalName.c_str() ), KEY_BUFFER ) )
  156. {
  157. ::SetDlgItemText( hDlg, IDC_EDIT_USERNAME, g_theEnviroment.sLocalName.c_str() );
  158. }
  159. g_theEnviroment.sLocalAddress0.resize( KEY_BUFFER );
  160. if ( GetLocalAddress( const_cast< LPTSTR >( g_theEnviroment.sLocalAddress0.c_str() ), KEY_BUFFER, 0 ) )
  161. {
  162. ::SetDlgItemText( hDlg, IDC_EDIT_IPADDRESS0, g_theEnviroment.sLocalAddress0.c_str() );
  163. }
  164. g_theEnviroment.sLocalAddress1.resize( KEY_BUFFER );
  165. if ( GetLocalAddress( const_cast< LPTSTR >( g_theEnviroment.sLocalAddress1.c_str() ), KEY_BUFFER, 1 ) )
  166. {
  167. ::SetDlgItemText( hDlg, IDC_EDIT_IPADDRESS1, g_theEnviroment.sLocalAddress1.c_str() );
  168. }
  169. ::SetDlgItemInt( hDlg, IDC_PORT_ACCOUNTSVR, g_theEnviroment.usAccSvrPort, FALSE );
  170. ::SetDlgItemInt( hDlg, IDC_PORT_ROLEDBSVR, g_theEnviroment.usRoleDBSvrPort, FALSE );
  171. ::SetDlgItemInt( hDlg, IDC_PORT_CLIENTSVR, g_theEnviroment.usClientOpenPort, FALSE );
  172. ::SetDlgItemInt( hDlg, IDC_PORT_GAMESVR, g_theEnviroment.usGameSvrOpenPort, FALSE );
  173. ::SetDlgItemText( hDlg, IDC_IP_ROLEDBSVR, g_theEnviroment.sRoleDBServerIP.c_str() );
  174. ::SetDlgItemText( hDlg, IDC_IP_ACCOUNTSVR, g_theEnviroment.sAccountServerIP.c_str() );
  175. ::SendDlgItemMessage( hDlg,
  176. IDC_ICON_INIFILE, 
  177. WM_SETICON, 
  178. ICON_SMALL, 
  179. (LPARAM)( ::LoadIcon( NULL, MAKEINTRESOURCE( IDI_INIFILE ) ) ) );
  180. return true;
  181. }
  182. void DestroySetupDlg( HWND hDlg )
  183. {
  184. g_theEnviroment.lnPlayerMaxCount = ::GetDlgItemInt( hDlg, IDC_EDIT_MAXAT, NULL, FALSE );
  185. g_theEnviroment.lnPrecision = ::GetDlgItemInt( hDlg, IDC_EDIT_PRECISION, NULL, FALSE );
  186. g_theEnviroment.usAccSvrPort = ::GetDlgItemInt( hDlg, IDC_PORT_ACCOUNTSVR, NULL, FALSE );
  187. g_theEnviroment.usRoleDBSvrPort = ::GetDlgItemInt( hDlg, IDC_PORT_ROLEDBSVR, NULL, FALSE );
  188. g_theEnviroment.usClientOpenPort = ::GetDlgItemInt( hDlg, IDC_PORT_CLIENTSVR, NULL, FALSE );
  189. g_theEnviroment.usGameSvrOpenPort = ::GetDlgItemInt( hDlg, IDC_PORT_GAMESVR, NULL, FALSE );
  190. g_theEnviroment.sRoleDBServerIP.resize( KEY_BUFFER );
  191. ::GetDlgItemText( hDlg, IDC_IP_ROLEDBSVR, 
  192. const_cast< LPSTR >( g_theEnviroment.sRoleDBServerIP.c_str() ), KEY_BUFFER );
  193. g_theEnviroment.sAccountServerIP.resize( KEY_BUFFER );
  194. ::GetDlgItemText( hDlg, IDC_IP_ACCOUNTSVR,
  195. const_cast< LPSTR >( g_theEnviroment.sAccountServerIP.c_str() ), KEY_BUFFER );
  196. }
  197. void OpenSetupFile( HWND hDlg )
  198. {
  199. OPENFILENAME ofn;       // common dialog box structure
  200. if ( 0 == g_theEnviroment.szConfigFileName[0] )
  201. {
  202. strcpy( g_theEnviroment.szConfigFileName, g_szDefaultSetupFile );
  203. }
  204. /*
  205.  * Initialize OPENFILENAME
  206.  */
  207. ZeroMemory( &ofn, sizeof( OPENFILENAME ) );
  208. ofn.lStructSize = sizeof( OPENFILENAME );
  209. ofn.hwndOwner = hDlg;
  210. ofn.lpstrFile = g_theEnviroment.szConfigFileName;
  211. ofn.nMaxFile = sizeof( g_theEnviroment.szConfigFileName );
  212. ofn.lpstrFilter = "Config Files (*.ini)*.ini";
  213. ofn.nFilterIndex = 0;
  214. ofn.lpstrTitle = "Open config File";
  215. ofn.lpstrInitialDir = ( LPCTSTR )( g_theEnviroment.sApplicationPath.c_str() );
  216. ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  217. /*
  218.  * Display the Open dialog box. 
  219.  */
  220. if ( ::GetOpenFileName( &ofn ) )
  221. {
  222. ::SetDlgItemText( hDlg, IDC_SETUPFILEPATH, ofn.lpstrFile );
  223. }
  224. }