诸暨麻将添加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.
 
 
 
 
 
 

334 lines
10 KiB

  1. #include "StdAfx.h"
  2. #include "ServerListControl.h"
  3. //////////////////////////////////////////////////////////////////////////////////
  4. //构造函数
  5. CServerListControl::CServerListControl()
  6. {
  7. }
  8. //析构函数
  9. CServerListControl::~CServerListControl()
  10. {
  11. }
  12. //配置列表
  13. VOID CServerListControl::InitListControl()
  14. {
  15. //变量定义
  16. INT nColIndex = 0;
  17. //配置列表
  18. InsertColumn(nColIndex++, TEXT("房间名字"), LVCFMT_LEFT, 120/*90*/);
  19. InsertColumn(nColIndex++, TEXT("模块名字"), LVCFMT_CENTER, 80);
  20. InsertColumn(nColIndex++, TEXT("房间类型"), LVCFMT_CENTER, 60);
  21. InsertColumn(nColIndex++, TEXT("桌子数目"), LVCFMT_CENTER, 60);
  22. InsertColumn(nColIndex++, TEXT("监听端口"), LVCFMT_CENTER, 60);
  23. InsertColumn(nColIndex++, TEXT("房间标识"), LVCFMT_CENTER, 60);
  24. InsertColumn(nColIndex++, TEXT("类型标识"), LVCFMT_CENTER, 60);
  25. InsertColumn(nColIndex++, TEXT("节点标识"), LVCFMT_CENTER, 60);
  26. InsertColumn(nColIndex++, TEXT("排序标识"), LVCFMT_CENTER, 60);
  27. InsertColumn(nColIndex++, TEXT("数据库名"), LVCFMT_LEFT, 100);
  28. InsertColumn(nColIndex++, TEXT("数据库地址"), LVCFMT_LEFT, 100);
  29. InsertColumn(nColIndex++, TEXT("服务器名"), LVCFMT_LEFT, 140);
  30. InsertColumn(nColIndex++, TEXT("客户端名"), LVCFMT_LEFT, 120);
  31. return;
  32. }
  33. //子项排序
  34. INT CServerListControl::SortListItemData(LPARAM lParam1, LPARAM lParam2, WORD wColumnIndex)
  35. {
  36. //变量定义
  37. tagGameServerInfo * pGameServerInfo1 = (tagGameServerInfo *)lParam1;
  38. tagGameServerInfo * pGameServerInfo2 = (tagGameServerInfo *)lParam2;
  39. //安装排序
  40. bool bInstall1 = (pGameServerInfo1->dwNativeVersion != 0L);
  41. bool bInstall2 = (pGameServerInfo2->dwNativeVersion != 0L);
  42. if (bInstall1 != bInstall2) return (bInstall1 == true) ? 1 : -1;
  43. //子项排序
  44. switch (wColumnIndex)
  45. {
  46. case 0: //房间名字
  47. {
  48. return lstrcmp(pGameServerInfo1->szServerName, pGameServerInfo2->szServerName);
  49. }
  50. case 1: //游戏名字
  51. {
  52. return lstrcmp(pGameServerInfo1->szGameName, pGameServerInfo2->szGameName);
  53. }
  54. case 2: //房间类型
  55. {
  56. return (pGameServerInfo1->wServerType > pGameServerInfo2->wServerType) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  57. }
  58. case 3: //桌子数目
  59. {
  60. return (pGameServerInfo1->wTableCount > pGameServerInfo2->wTableCount) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  61. }
  62. case 4: //监听端口
  63. {
  64. return (pGameServerInfo1->wServerPort > pGameServerInfo2->wServerPort) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  65. }
  66. case 5: //房间标识
  67. {
  68. return (pGameServerInfo1->wServerID > pGameServerInfo2->wServerID) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  69. }
  70. case 6: //类型标识
  71. {
  72. //房间标识
  73. WORD wKindID1 = pGameServerInfo1->wKindID;
  74. if (wKindID1 == 0) wKindID1 = pGameServerInfo1->wGameID;
  75. //房间标识
  76. WORD wKindID2 = pGameServerInfo2->wKindID;
  77. if (wKindID2 == 0) wKindID2 = pGameServerInfo2->wGameID;
  78. return (wKindID1 > wKindID2) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  79. }
  80. case 7: //节点标识
  81. {
  82. return (pGameServerInfo1->wNodeID > pGameServerInfo2->wNodeID) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  83. }
  84. case 8: //排序标识
  85. {
  86. return (pGameServerInfo1->wSortID > pGameServerInfo2->wSortID) ? SORT_POSITION_AFTER : SORT_POSITION_FRONT;
  87. }
  88. case 9: //数据库名
  89. {
  90. return lstrcmp(pGameServerInfo1->szDataBaseName, pGameServerInfo2->szDataBaseName);
  91. }
  92. case 10: //数据库地址
  93. {
  94. return lstrcmp(pGameServerInfo1->szDataBaseAddr, pGameServerInfo2->szDataBaseAddr);
  95. }
  96. case 11: //服务器名
  97. {
  98. return lstrcmp(pGameServerInfo1->szServerDLLName, pGameServerInfo2->szServerDLLName);
  99. }
  100. case 12: //客户端名
  101. {
  102. return lstrcmp(pGameServerInfo1->szClientEXEName, pGameServerInfo2->szClientEXEName);
  103. }
  104. }
  105. return 0;
  106. }
  107. //获取颜色
  108. VOID CServerListControl::GetListItemColor(LPARAM lItemParam, UINT uItemStatus, tagListItemColor & ListItemColor)
  109. {
  110. //变量定义
  111. ASSERT(lItemParam != NULL);
  112. tagGameServerInfo * pGameServerInfo = (tagGameServerInfo *)lItemParam;
  113. //没有安装
  114. if (pGameServerInfo->dwNativeVersion == 0L)
  115. {
  116. //设置颜色
  117. ListItemColor.rcTextColor = RGB(125, 125, 125);
  118. ListItemColor.rcBackColor = (uItemStatus&ODS_SELECTED) ? RGB(50, 50, 50) : CR_NORMAL_BK;
  119. return;
  120. }
  121. //存在更新
  122. if (pGameServerInfo->dwNativeVersion != pGameServerInfo->dwServerVersion)
  123. {
  124. //设置颜色
  125. ListItemColor.rcTextColor = RGB(128, 0, 0);
  126. ListItemColor.rcBackColor = (uItemStatus&ODS_SELECTED) ? RGB(230, 230, 0) : CR_NORMAL_BK;
  127. return;
  128. }
  129. //版本一致
  130. if (pGameServerInfo->dwNativeVersion == pGameServerInfo->dwServerVersion)
  131. {
  132. //设置颜色
  133. ListItemColor.rcBackColor = (uItemStatus&ODS_SELECTED) ? RGB(0, 0, 128) : CR_NORMAL_BK;
  134. ListItemColor.rcTextColor = (uItemStatus&ODS_SELECTED) ? RGB(255, 255, 255) : RGB(0, 0, 0);
  135. return;
  136. }
  137. return;
  138. }
  139. //插入列表
  140. bool CServerListControl::InsertServerInfo(tagGameServerInfo * pGameServerInfo)
  141. {
  142. //变量定义
  143. LVFINDINFO FindInfo;
  144. ZeroMemory(&FindInfo, sizeof(FindInfo));
  145. //设置变量
  146. FindInfo.flags = LVFI_PARAM;
  147. FindInfo.lParam = (LPARAM)pGameServerInfo;
  148. //存在判断
  149. INT nInsertItem = FindItem(&FindInfo);
  150. if (nInsertItem != LB_ERR) return true;
  151. //插入列表
  152. for (WORD i = 0; i < m_ListHeaderCtrl.GetItemCount(); i++)
  153. {
  154. if (i == 0)
  155. {
  156. //插入首项
  157. INT nIndex = GetInsertIndex(pGameServerInfo);
  158. LPCTSTR pszDescribe = GetDescribeString(pGameServerInfo, i);
  159. nInsertItem = InsertItem(LVIF_TEXT | LVIF_PARAM, nIndex, pszDescribe, 0, 0, 0, (LPARAM)pGameServerInfo);
  160. }
  161. else
  162. {
  163. //字符子项
  164. SetItem(nInsertItem, i, LVIF_TEXT, GetDescribeString(pGameServerInfo, i), 0, 0, 0, 0);
  165. }
  166. }
  167. return true;
  168. }
  169. //插入索引
  170. WORD CServerListControl::GetInsertIndex(tagGameServerInfo * pGameServerInfo)
  171. {
  172. //变量定义
  173. INT nItemCount = GetItemCount();
  174. tagGameServerInfo * pGameServerTemp = NULL;
  175. //获取位置
  176. for (INT i = 0; i < nItemCount; i++)
  177. {
  178. //获取数据
  179. pGameServerTemp = (tagGameServerInfo *)GetItemData(i);
  180. //安装判断
  181. if ((pGameServerInfo->dwNativeVersion == 0) && (pGameServerTemp->dwNativeVersion != 0))
  182. {
  183. continue;
  184. }
  185. //游戏名字
  186. if (lstrcmp(pGameServerInfo->szGameName, pGameServerTemp->szGameName) < 0)
  187. {
  188. return i;
  189. }
  190. //房间名字
  191. if (lstrcmp(pGameServerInfo->szServerName, pGameServerTemp->szServerName) < 0)
  192. {
  193. return i;
  194. }
  195. }
  196. return nItemCount;
  197. }
  198. //描述字符
  199. LPCTSTR CServerListControl::GetDescribeString(tagGameServerInfo * pGameServerInfo, WORD wColumnIndex)
  200. {
  201. //变量定义
  202. static TCHAR szDescribe[128] = TEXT("");
  203. //构造字符
  204. switch (wColumnIndex)
  205. {
  206. case 0: //房间名字
  207. {
  208. return pGameServerInfo->szServerName;
  209. }
  210. case 1: //游戏名字
  211. {
  212. return pGameServerInfo->szGameName;
  213. }
  214. case 2: //房间类型
  215. {
  216. //财富类型
  217. if (pGameServerInfo->wServerType&GAME_GENRE_GOLD)
  218. {
  219. lstrcpyn(szDescribe, TEXT("财富类型"), CountArray(szDescribe));
  220. return szDescribe;
  221. }
  222. //积分类型
  223. if (pGameServerInfo->wServerType&GAME_GENRE_SCORE)
  224. {
  225. lstrcpyn(szDescribe, TEXT("金币类型")/*TEXT("积分类型")*/, CountArray(szDescribe));
  226. return szDescribe;
  227. }
  228. //比赛类型
  229. if (pGameServerInfo->wServerType&GAME_GENRE_MATCH)
  230. {
  231. lstrcpyn(szDescribe, TEXT("比赛类型"), CountArray(szDescribe));
  232. return szDescribe;
  233. }
  234. //训练类型
  235. if (pGameServerInfo->wServerType&GAME_GENRE_EDUCATE)
  236. {
  237. lstrcpyn(szDescribe, TEXT("训练类型"), CountArray(szDescribe));
  238. return szDescribe;
  239. }
  240. return TEXT("未知类型");
  241. }
  242. case 3: //桌子数目
  243. {
  244. _itot(pGameServerInfo->wTableCount, szDescribe, 10);
  245. return szDescribe;
  246. }
  247. case 4: //监听端口
  248. {
  249. if (pGameServerInfo->wServerPort == 0) return TEXT("-");
  250. _itot(pGameServerInfo->wServerPort, szDescribe, 10);
  251. return szDescribe;
  252. }
  253. case 5: //房间标识
  254. {
  255. _itot(pGameServerInfo->wServerID, szDescribe, 10);
  256. return szDescribe;
  257. }
  258. case 6: //类型标识
  259. {
  260. WORD wKindID = pGameServerInfo->wKindID;
  261. WORD wGameID = pGameServerInfo->wGameID;
  262. _itot((wKindID == 0) ? wGameID : wKindID, szDescribe, 10);
  263. return szDescribe;
  264. }
  265. case 7: //节点标识
  266. {
  267. _itot(pGameServerInfo->wNodeID, szDescribe, 10);
  268. return szDescribe;
  269. }
  270. case 8: //排序标识
  271. {
  272. _itot(pGameServerInfo->wSortID, szDescribe, 10);
  273. return szDescribe;
  274. }
  275. case 9: //数据库名
  276. {
  277. return pGameServerInfo->szDataBaseName;
  278. }
  279. case 10: //数据库地址
  280. {
  281. return pGameServerInfo->szDataBaseAddr;
  282. }
  283. case 11: //服务器名
  284. {
  285. return pGameServerInfo->szServerDLLName;
  286. }
  287. case 12: //客户端名
  288. {
  289. return pGameServerInfo->szClientEXEName;
  290. }
  291. }
  292. return NULL;
  293. }
  294. //////////////////////////////////////////////////////////////////////////////////