诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

475 lines
15 KiB

  1. // DlgServerItem.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "resource.h"
  5. #include "DlgServerItem.h"
  6. #include "afxdialogex.h"
  7. //列表属性
  8. #define LIST_STYTE LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_FLATSB
  9. // CDlgServerItem 对话框
  10. IMPLEMENT_DYNAMIC(CDlgServerItem, CDialogEx)
  11. CDlgServerItem::CDlgServerItem(CWnd* pParent /*=NULL*/)
  12. : CDialogEx(IDD_SERVER_ITEM, pParent)
  13. {
  14. //模块参数
  15. ZeroMemory(&m_ModuleInitParameter, sizeof(m_ModuleInitParameter));
  16. }
  17. CDlgServerItem::~CDlgServerItem()
  18. {
  19. }
  20. void CDlgServerItem::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CDialogEx::DoDataExchange(pDX);
  23. DDX_Control(pDX, IDC_SERVER_LIST, m_ServerListControl);
  24. }
  25. bool CDlgServerItem::OpenGameServer()
  26. {
  27. //设置资源
  28. AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME));
  29. //配置房间
  30. if (DoModal() == IDC_LOAD_SERVER)
  31. {
  32. return true;
  33. }
  34. return false;
  35. }
  36. bool CDlgServerItem::OpenGameServer(WORD wServerID)
  37. {
  38. //变量定义
  39. tagGameServerInfo GameServerResult;
  40. ZeroMemory(&GameServerResult, sizeof(GameServerResult));
  41. //机器标识
  42. TCHAR szMachineID[LEN_MACHINE_ID];
  43. CWHService::GetMachineID(szMachineID);
  44. //加载房间
  45. CServerInfoManager ServerInfoManager;
  46. if (ServerInfoManager.LoadGameServerInfo(szMachineID, wServerID, GameServerResult) == false)
  47. {
  48. return false;
  49. }
  50. //获取参数
  51. if (GetModuleInitParameter(&GameServerResult, true) == false)
  52. {
  53. return false;
  54. }
  55. return true;
  56. }
  57. bool CDlgServerItem::LoadDBServerItem()
  58. {
  59. //重置列表
  60. m_ServerListControl.DeleteAllItems();
  61. //设置按钮
  62. GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
  63. GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
  64. GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
  65. //机器标识
  66. TCHAR szMachineID[LEN_MACHINE_ID];
  67. CWHService::GetMachineID(szMachineID);
  68. //加载信息
  69. CServerInfoManager ServerInfoManager;
  70. if (ServerInfoManager.LoadGameServerInfo(szMachineID, m_ServerInfoBuffer) == true)
  71. {
  72. //变量定义
  73. POSITION Position = m_ServerInfoBuffer.m_GameServerInfoMap.GetStartPosition();
  74. bool bFind = false;
  75. //枚举模块
  76. while (Position != NULL)
  77. {
  78. //获取对象
  79. WORD wServerID = 0L;
  80. tagGameServerInfo * pGameServerInfo = NULL;
  81. m_ServerInfoBuffer.m_GameServerInfoMap.GetNextAssoc(Position, wServerID, pGameServerInfo);
  82. //插入列表
  83. ASSERT(pGameServerInfo != NULL);
  84. if (pGameServerInfo != NULL)
  85. {
  86. m_ServerListControl.InsertServerInfo(pGameServerInfo);
  87. if (g_StartP.wServerID == pGameServerInfo->wServerID)
  88. {
  89. bool bRet = GetModuleInitParameter(pGameServerInfo, true);
  90. if (bRet == false)
  91. {
  92. g_StartP.iErr = -1;
  93. }
  94. else
  95. {
  96. bFind = true;
  97. }
  98. }
  99. }
  100. }
  101. if (bFind == false && g_StartP.iErr != -1) g_StartP.iErr = -2;
  102. return true;
  103. }
  104. return false;
  105. }
  106. bool CDlgServerItem::UpdateControlStatus()
  107. {
  108. //获取选择
  109. POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
  110. //设置列表
  111. if (Position != NULL)
  112. {
  113. //获取房间
  114. INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
  115. tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
  116. //设置按钮
  117. if (pGameServerInfo->dwNativeVersion != 0L)
  118. {
  119. GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(TRUE);
  120. GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
  121. GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(TRUE);
  122. }
  123. else
  124. {
  125. GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
  126. GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(TRUE);
  127. GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
  128. }
  129. }
  130. else
  131. {
  132. //设置按钮
  133. GetDlgItem(IDC_LOAD_SERVER)->EnableWindow(FALSE);
  134. GetDlgItem(IDC_DELETE_SERVER)->EnableWindow(FALSE);
  135. GetDlgItem(IDC_SERVICE_ATTRIB)->EnableWindow(FALSE);
  136. }
  137. return true;
  138. }
  139. bool CDlgServerItem::GetModuleInitParameter(tagGameServerInfo * pGameServerInfo, bool bAutoMode)
  140. {
  141. //效验参数
  142. ASSERT(pGameServerInfo != NULL);
  143. if (pGameServerInfo == NULL) return false;
  144. //游戏模块
  145. CGameServiceManagerHelper GameServiceManager;
  146. GameServiceManager.SetModuleCreateInfo(pGameServerInfo->szServerDLLName, GAME_SERVICE_CREATE_NAME); ///---由DLL玩法类实现的
  147. //创建判断
  148. if (pGameServerInfo->dwNativeVersion == 0)
  149. {
  150. //构造提示
  151. TCHAR szString[128] = TEXT("");
  152. _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 游戏服务器组件还没有安装,请先安装对应的游戏服务器"), pGameServerInfo->szGameName);
  153. //提示消息
  154. if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
  155. else AfxMessageBox(szString, MB_ICONERROR);
  156. return false;
  157. }
  158. //更新判断
  159. if (pGameServerInfo->dwNativeVersion != pGameServerInfo->dwServerVersion)
  160. {
  161. //构造提示
  162. TCHAR szString[128] = TEXT("");
  163. _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 游戏服务器组件已经更新了,不能继续用于启动房间"), pGameServerInfo->szGameName);
  164. //提示消息
  165. if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
  166. else AfxMessageBox(szString, MB_ICONERROR);
  167. return false;
  168. }
  169. //加载模块
  170. if (GameServiceManager.CreateInstance() == false)
  171. {
  172. //构造提示
  173. TCHAR szString[128] = TEXT("");
  174. _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 服务组件不存在或者加载失败,请重新安装服务组件"), pGameServerInfo->szGameName);
  175. //提示消息
  176. if (bAutoMode == true) CTraceService::TraceString(szString, TraceLevel_Exception);
  177. else AfxMessageBox(szString, MB_ICONERROR);
  178. return false;
  179. }
  180. //模块属性
  181. GameServiceManager->GetServiceAttrib(m_ModuleInitParameter.GameServiceAttrib); ///---DLL提供配置
  182. ///+++赋值前,清空下
  183. memset(&m_ModuleInitParameter.GameServiceOption, 0, sizeof(m_ModuleInitParameter.GameServiceOption));
  184. //挂接属性
  185. m_ModuleInitParameter.GameServiceOption.wGameID = pGameServerInfo->wGameID;
  186. m_ModuleInitParameter.GameServiceOption.wKindID = pGameServerInfo->wKindID;
  187. m_ModuleInitParameter.GameServiceOption.wNodeID = pGameServerInfo->wNodeID;
  188. m_ModuleInitParameter.GameServiceOption.wSortID = pGameServerInfo->wSortID;
  189. m_ModuleInitParameter.GameServiceOption.wServerID = pGameServerInfo->wServerID;
  190. //税收配置
  191. m_ModuleInitParameter.GameServiceOption.lCellScore = pGameServerInfo->lCellScore;
  192. m_ModuleInitParameter.GameServiceOption.wRevenueRatio = pGameServerInfo->wRevenueRatio;
  193. m_ModuleInitParameter.GameServiceOption.lServiceScore = pGameServerInfo->lServiceScore;
  194. //房间配置
  195. m_ModuleInitParameter.GameServiceOption.lRestrictScore = pGameServerInfo->lRestrictScore;
  196. m_ModuleInitParameter.GameServiceOption.lMinTableScore = pGameServerInfo->lMinTableScore;
  197. m_ModuleInitParameter.GameServiceOption.lMinEnterScore = pGameServerInfo->lMinEnterScore;
  198. m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = pGameServerInfo->lMaxEnterScore;
  199. //会员限制
  200. m_ModuleInitParameter.GameServiceOption.cbMinEnterMember = pGameServerInfo->cbMinEnterMember;
  201. m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember = pGameServerInfo->cbMaxEnterMember;
  202. //房间配置
  203. m_ModuleInitParameter.GameServiceOption.dwServerRule = pGameServerInfo->dwServerRule;
  204. m_ModuleInitParameter.GameServiceOption.dwAttachUserRight = pGameServerInfo->dwAttachUserRight;
  205. //房间属性
  206. m_ModuleInitParameter.GameServiceOption.wMaxPlayer = pGameServerInfo->wMaxPlayer;
  207. m_ModuleInitParameter.GameServiceOption.wTableCount = pGameServerInfo->wTableCount;
  208. m_ModuleInitParameter.GameServiceOption.wServerPort = pGameServerInfo->wServerPort;
  209. m_ModuleInitParameter.GameServiceOption.wServerKind = pGameServerInfo->wServerKind;
  210. m_ModuleInitParameter.GameServiceOption.wServerType = pGameServerInfo->wServerType;
  211. lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerName, pGameServerInfo->szServerName, LEN_SERVER);
  212. lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerPasswd, pGameServerInfo->szServerPasswd, LEN_PASSWORD);
  213. //分组属性
  214. m_ModuleInitParameter.GameServiceOption.cbDistributeRule = pGameServerInfo->cbDistributeRule;
  215. m_ModuleInitParameter.GameServiceOption.wMinDistributeUser = pGameServerInfo->wMinDistributeUser;
  216. m_ModuleInitParameter.GameServiceOption.wDistributeTimeSpace = pGameServerInfo->wDistributeTimeSpace;
  217. m_ModuleInitParameter.GameServiceOption.wDistributeDrawCount = pGameServerInfo->wDistributeDrawCount;
  218. m_ModuleInitParameter.GameServiceOption.wMinPartakeGameUser = pGameServerInfo->wMinPartakeGameUser;
  219. m_ModuleInitParameter.GameServiceOption.wMaxPartakeGameUser = pGameServerInfo->wMaxPartakeGameUser;
  220. //连接信息
  221. lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseName, pGameServerInfo->szDataBaseName, CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseName));
  222. lstrcpyn(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr, pGameServerInfo->szDataBaseAddr, CountArray(m_ModuleInitParameter.GameServiceOption.szDataBaseAddr));
  223. //数据设置
  224. UINT uCustomRuleSize = sizeof(m_ModuleInitParameter.GameServiceOption.cbCustomRule);
  225. CopyMemory(m_ModuleInitParameter.GameServiceOption.cbCustomRule, pGameServerInfo->cbCustomRule, uCustomRuleSize);
  226. ///+++此玩法的场馆信息
  227. CServerInfoManager serverInfoManager;
  228. std::vector<tagVenueInfo> vecVenueInfo; //场馆列表
  229. serverInfoManager.LoadVenueInfos(m_ModuleInitParameter.GameServiceAttrib.wKindID, vecVenueInfo);
  230. m_ModuleInitParameter.vecVenueInfo = vecVenueInfo;
  231. ///+++如果是金币场,使用场馆的最新配置
  232. if (m_ModuleInitParameter.GameServiceOption.wNodeID > 0)
  233. {
  234. for (std::vector<tagVenueInfo>::iterator it = vecVenueInfo.begin(); it != vecVenueInfo.end(); it++)
  235. {
  236. if (it->wVenueID == m_ModuleInitParameter.GameServiceOption.wNodeID)
  237. {
  238. m_ModuleInitParameter.GameServiceOption.lCellScore = it->sBaseScore;
  239. m_ModuleInitParameter.GameServiceOption.lMinEnterScore = it->sMinScore;
  240. m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = it->sMaxScore;
  241. m_ModuleInitParameter.GameServiceOption.lRestrictScore = it->lRestrictScore;
  242. m_ModuleInitParameter.GameServiceOption.lServiceScore = it->sServiceScore;
  243. m_ModuleInitParameter.GameServiceOption.wRevenueRatio = it->wRevenueRatio;
  244. lstrcpyn(m_ModuleInitParameter.GameServiceOption.szExtConfig, it->szExtConfig, CountArray(it->szExtConfig));
  245. break;
  246. }
  247. }
  248. }
  249. return true;
  250. }
  251. BEGIN_MESSAGE_MAP(CDlgServerItem, CDialogEx)
  252. ON_BN_CLICKED(IDOK, &CDlgServerItem::OnBnClickedOk)
  253. ON_BN_CLICKED(IDC_LOAD_SERVER, &CDlgServerItem::OnBnClickedLoadServer)
  254. ON_BN_CLICKED(IDC_RELOAD_LIST, &CDlgServerItem::OnBnClickedReloadList)
  255. ON_BN_CLICKED(IDC_DELETE_SERVER, &CDlgServerItem::OnBnClickedDeleteServer)
  256. ON_BN_CLICKED(IDC_SERVICE_ATTRIB, &CDlgServerItem::OnBnClickedServiceAttrib)
  257. ON_NOTIFY(LVN_ITEMCHANGED, IDC_SERVER_LIST, &CDlgServerItem::OnLvnItemchangedServerList)
  258. ON_NOTIFY(NM_DBLCLK, IDC_SERVER_LIST, &CDlgServerItem::OnNMDblclkServerList)
  259. ON_WM_TIMER()
  260. END_MESSAGE_MAP()
  261. // CDlgServerItem 消息处理程序
  262. void CDlgServerItem::OnBnClickedOk()
  263. {
  264. return;
  265. }
  266. void CDlgServerItem::OnBnClickedLoadServer()
  267. {
  268. //获取选择
  269. ASSERT(m_ServerListControl.GetFirstSelectedItemPosition() != NULL);
  270. POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
  271. //获取房间
  272. INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
  273. tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
  274. //设置变量
  275. if ((pGameServerInfo != NULL) && (GetModuleInitParameter(pGameServerInfo, false) == true))
  276. {
  277. //修改所选择节点
  278. TCHAR szWorkDir[MAX_PATH] = TEXT("");
  279. CWHService::GetWorkDirectory(szWorkDir, CountArray(szWorkDir));
  280. //构造路径
  281. TCHAR szIniFile[MAX_PATH] = TEXT("");
  282. _sntprintf(szIniFile, CountArray(szIniFile), TEXT("%s\\Parameter.ini"), szWorkDir);
  283. CString csText;
  284. csText.Format(L"%d", pGameServerInfo->wServerID);
  285. //保存
  286. BOOL bRet = WritePrivateProfileString(TEXT("Server"), TEXT("ServerID"), csText, szIniFile);
  287. EndDialog(IDC_LOAD_SERVER);
  288. }
  289. return;
  290. }
  291. void CDlgServerItem::OnBnClickedReloadList()
  292. {
  293. //加载列表
  294. LoadDBServerItem();
  295. return;
  296. }
  297. void CDlgServerItem::OnBnClickedDeleteServer()
  298. {
  299. //获取选择
  300. ASSERT(m_ServerListControl.GetFirstSelectedItemPosition() != NULL);
  301. POSITION Position = m_ServerListControl.GetFirstSelectedItemPosition();
  302. //获取房间
  303. INT nListItem = m_ServerListControl.GetNextSelectedItem(Position);
  304. tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)m_ServerListControl.GetItemData(nListItem);
  305. //设置变量
  306. if (pGameServerInfo != NULL)
  307. {
  308. //构造提示
  309. TCHAR szString[128] = TEXT("");
  310. _sntprintf(szString, CountArray(szString), TEXT("确实要删除 [ %s ] 游戏房间吗?"), pGameServerInfo->szServerName);
  311. //提示消息
  312. if (AfxMessageBox(szString, MB_ICONQUESTION | MB_YESNO) != IDYES) return;
  313. //删除房间
  314. CServerInfoManager ServerInfoManager;
  315. if (ServerInfoManager.DeleteGameServer(pGameServerInfo->wServerID) == false) return;
  316. //删除列表
  317. m_ServerListControl.DeleteItem(nListItem);
  318. m_ServerInfoBuffer.DeleteServerInfo(pGameServerInfo->wServerID);
  319. //设置列表
  320. if (m_ServerListControl.GetItemCount() > 0)
  321. {
  322. //设置变量
  323. INT nItemCount = m_ServerListControl.GetItemCount();
  324. INT nNextItem = (nListItem >= nItemCount) ? (nItemCount - 1) : nListItem;
  325. //设置选择
  326. m_ServerListControl.SetItemState(nNextItem, LVIS_SELECTED, LVIS_SELECTED);
  327. }
  328. //更新控制
  329. UpdateControlStatus();
  330. }
  331. return;
  332. }
  333. void CDlgServerItem::OnBnClickedServiceAttrib()
  334. {
  335. return;
  336. }
  337. void CDlgServerItem::OnLvnItemchangedServerList(NMHDR *pNMHDR, LRESULT *pResult)
  338. {
  339. //更新控制
  340. UpdateControlStatus();
  341. return;
  342. }
  343. void CDlgServerItem::OnNMDblclkServerList(NMHDR *pNMHDR, LRESULT *pResult)
  344. {
  345. //加载配置
  346. if (((NMITEMACTIVATE *)pNMHDR)->iItem != LB_ERR)
  347. {
  348. OnBnClickedLoadServer();
  349. }
  350. return;
  351. }
  352. BOOL CDlgServerItem::OnInitDialog()
  353. {
  354. CDialogEx::OnInitDialog();
  355. //设置资源
  356. AfxSetResourceHandle(GetModuleHandle(NULL));
  357. //加载房间
  358. LoadDBServerItem();
  359. if (g_StartP.iAuto == 1)
  360. {
  361. SetTimer(3, 1000, NULL); //自动选择
  362. }
  363. return TRUE; // return TRUE unless you set the focus to a control
  364. // 异常: OCX 属性页应返回 FALSE
  365. }
  366. void CDlgServerItem::OnTimer(UINT_PTR nIDEvent)
  367. {
  368. // TODO: 在此添加消息处理程序代码和/或调用默认值
  369. if (nIDEvent == 3)
  370. {
  371. KillTimer(nIDEvent);
  372. if (g_StartP.wServerID > 0) EndDialog(IDC_LOAD_SERVER);
  373. }
  374. CDialogEx::OnTimer(nIDEvent);
  375. }