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

900 line
23 KiB

  1. #include "StdAfx.h"
  2. #include "GlobalInfoManager.h"
  3. #include "AttemperEngineSink.h"
  4. //////////////////////////////////////////////////////////////////////////////////
  5. //构造函数
  6. CGlobalUserItem::CGlobalUserItem()
  7. {
  8. //用户属性
  9. m_dwUserID = 0L;
  10. m_dwGameID = 0L;
  11. //等级信息
  12. m_cbMemberOrder = 0;
  13. m_cbMasterOrder = 0;
  14. //链表属性
  15. m_pNextUserItemPtr = NULL;
  16. m_ServerID = 0;
  17. IsPlaying = false; //是否在桌子里打牌
  18. return;
  19. }
  20. //析构函数
  21. CGlobalUserItem::~CGlobalUserItem()
  22. {
  23. }
  24. //枚举房间
  25. CGlobalServerItem * CGlobalUserItem::EnumServerItem(WORD wIndex)
  26. {
  27. if (wIndex >= m_GlobalServerItemArray.GetCount()) return NULL;
  28. return m_GlobalServerItemArray[wIndex];
  29. }
  30. //////////////////////////////////////////////////////////////////////////////////
  31. //构造函数
  32. CGlobalPlazaItem::CGlobalPlazaItem()
  33. {
  34. //设置变量
  35. m_wIndex = 0;
  36. ZeroMemory(&m_GamePlaza, sizeof(m_GamePlaza));
  37. //链表属性
  38. m_pNextPlazaItemPtr = NULL;
  39. return;
  40. }
  41. //析构函数
  42. CGlobalPlazaItem::~CGlobalPlazaItem()
  43. {
  44. }
  45. //////////////////////////////////////////////////////////////////////////////////
  46. //构造函数
  47. CGlobalServerItem::CGlobalServerItem()
  48. {
  49. //设置变量
  50. m_wIndex = 0;
  51. ZeroMemory(&m_GameServer, sizeof(m_GameServer));
  52. ZeroMemory(&m_GameMatch, sizeof(m_GameMatch));
  53. //链表属性
  54. m_pNextServerItemPtr = NULL;
  55. //设置质数
  56. m_MapUserID.InitHashTable(PRIME_SERVER_USER);
  57. return;
  58. }
  59. //析构函数
  60. CGlobalServerItem::~CGlobalServerItem()
  61. {
  62. }
  63. //寻找用户
  64. CGlobalUserItem * CGlobalServerItem::SearchUserItem(DWORD dwUserID)
  65. {
  66. //搜索用户
  67. CGlobalUserItem * pGlobalUserItem = NULL;
  68. m_MapUserID.Lookup(dwUserID, pGlobalUserItem);
  69. return pGlobalUserItem;
  70. }
  71. //////////////////////////////////////////////////////////////////////////////////
  72. //构造函数
  73. CGlobalInfoManager::CGlobalInfoManager()
  74. {
  75. //存储变量
  76. m_pGlobalUserItem = NULL;
  77. m_pGlobalPlazaItem = NULL;
  78. m_pGlobalServerItem = NULL;
  79. m_pCAttemperEngineSink = NULL;
  80. //设置索引
  81. m_MapPlazaID.InitHashTable(PRIME_SERVER);
  82. m_MapServerID.InitHashTable(PRIME_SERVER);
  83. m_MapUserID.InitHashTable(PRIME_PLATFORM_USER);
  84. m_MapGameID.InitHashTable(PRIME_PLATFORM_USER);
  85. //m_MapNickName.InitHashTable(PRIME_PLATFORM_USER);
  86. m_RoomList.InitHashTable(PRIME_PLATFORM_USER);
  87. m_PrivateRoom.InitHashTable(PRIME_PLATFORM_USER);
  88. return;
  89. }
  90. //析构函数
  91. CGlobalInfoManager::~CGlobalInfoManager()
  92. {
  93. //删除用户
  94. DWORD dwUserID = 0L;
  95. CGlobalUserItem * pGlobalUserItem = NULL;
  96. POSITION Position = m_MapUserID.GetStartPosition();
  97. while (Position != NULL)
  98. {
  99. m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem);
  100. SafeDelete(pGlobalUserItem);
  101. }
  102. m_MapUserID.RemoveAll();
  103. //删除广场
  104. WORD wPlazaID = 0;
  105. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  106. Position = m_MapPlazaID.GetStartPosition();
  107. while (Position != NULL)
  108. {
  109. m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem);
  110. SafeDelete(pGlobalPlazaItem);
  111. }
  112. m_MapPlazaID.RemoveAll();
  113. //删除房间
  114. WORD wServerID = 0;
  115. CGlobalServerItem * pGlobalServerItem = NULL;
  116. Position = m_MapServerID.GetStartPosition();
  117. while (Position != NULL)
  118. {
  119. m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem);
  120. SafeDelete(pGlobalServerItem);
  121. }
  122. m_MapServerID.RemoveAll();
  123. //删除用户
  124. while (m_pGlobalUserItem != NULL)
  125. {
  126. pGlobalUserItem = m_pGlobalUserItem;
  127. m_pGlobalUserItem = m_pGlobalUserItem->m_pNextUserItemPtr;
  128. SafeDelete(pGlobalUserItem);
  129. }
  130. //删除广场
  131. while (m_pGlobalPlazaItem != NULL)
  132. {
  133. pGlobalPlazaItem = m_pGlobalPlazaItem;
  134. m_pGlobalPlazaItem = m_pGlobalPlazaItem->m_pNextPlazaItemPtr;
  135. SafeDelete(pGlobalPlazaItem);
  136. }
  137. //删除房间
  138. while (m_pGlobalServerItem != NULL)
  139. {
  140. pGlobalServerItem = m_pGlobalServerItem;
  141. m_pGlobalServerItem = m_pGlobalServerItem->m_pNextServerItemPtr;
  142. SafeDelete(pGlobalServerItem);
  143. }
  144. m_PrivateRoom.RemoveAll();
  145. m_RoomList.RemoveAll();
  146. return;
  147. }
  148. //重置数据
  149. VOID CGlobalInfoManager::ResetData()
  150. {
  151. //删除用户
  152. DWORD dwUserID = 0L;
  153. CGlobalUserItem * pGlobalUserItem = NULL;
  154. POSITION Position = m_MapUserID.GetStartPosition();
  155. //删除用户
  156. while (Position != NULL)
  157. {
  158. m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem);
  159. if (pGlobalUserItem != NULL) FreeGlobalUserItem(pGlobalUserItem);
  160. }
  161. //删除广场
  162. WORD wPlazaID = 0;
  163. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  164. Position = m_MapPlazaID.GetStartPosition();
  165. //删除广场
  166. while (Position != NULL)
  167. {
  168. m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem);
  169. if (pGlobalPlazaItem != NULL) FreeGlobalPlazaItem(pGlobalPlazaItem);
  170. }
  171. //删除房间
  172. WORD wServerID = 0;
  173. CGlobalServerItem * pGlobalServerItem = NULL;
  174. Position = m_MapServerID.GetStartPosition();
  175. //删除房间
  176. while (Position != NULL)
  177. {
  178. m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem);
  179. if (pGlobalServerItem != NULL) FreeGlobalServerItem(pGlobalServerItem);
  180. }
  181. //删除索引
  182. m_MapUserID.RemoveAll();
  183. m_MapGameID.RemoveAll();
  184. m_MapPlazaID.RemoveAll();
  185. m_MapServerID.RemoveAll();
  186. //m_MapNickName.RemoveAll();
  187. return;
  188. }
  189. //删除用户
  190. bool CGlobalInfoManager::DeleteUserItem(DWORD dwUserID, WORD wServerID)
  191. {
  192. //寻找用户
  193. CGlobalUserItem * pGlobalUserItem = NULL;
  194. if (m_MapUserID.Lookup(dwUserID, pGlobalUserItem) == FALSE)
  195. {
  196. //ASSERT(FALSE);
  197. return false;
  198. }
  199. if (wServerID == pGlobalUserItem->m_ServerID)
  200. {
  201. pGlobalUserItem->m_ServerID = 0;
  202. }
  203. //变量定义
  204. CGlobalServerItem * pGlobalServerItem = NULL;
  205. INT_PTR nServerCount = pGlobalUserItem->m_GlobalServerItemArray.GetCount();
  206. //退出房间
  207. for (INT_PTR i = 0; i < nServerCount; i++)
  208. {
  209. //获取房间
  210. pGlobalServerItem = pGlobalUserItem->m_GlobalServerItemArray[i];
  211. //房间判断
  212. if (pGlobalServerItem->GetServerID() == wServerID)
  213. {
  214. //删除关联
  215. pGlobalServerItem->m_MapUserID.RemoveKey(dwUserID);
  216. pGlobalUserItem->m_GlobalServerItemArray.RemoveAt(i);
  217. //释放用户
  218. if (pGlobalUserItem->m_GlobalServerItemArray.GetCount() == 0L/* && pGlobalUserItem->GetRoomData().Num == 0*/)
  219. {
  220. //释放索引
  221. m_MapUserID.RemoveKey(dwUserID);
  222. m_MapGameID.RemoveKey(pGlobalUserItem->GetGameID());
  223. // m_MapNickName.RemoveKey(pGlobalUserItem->GetNickName());
  224. //释放对象
  225. FreeGlobalUserItem(pGlobalUserItem);
  226. }
  227. return true;
  228. }
  229. }
  230. //错误断言
  231. ASSERT(FALSE);
  232. return false;
  233. }
  234. //删除用户
  235. bool CGlobalInfoManager::DeleteUserItem(DWORD dwUserID)
  236. {
  237. //寻找用户
  238. CGlobalUserItem * pGlobalUserItem = NULL;
  239. if (m_MapUserID.Lookup(dwUserID, pGlobalUserItem) == FALSE)
  240. {
  241. ASSERT(FALSE);
  242. return false;
  243. }
  244. //变量定义
  245. CGlobalServerItem * pGlobalServerItem = NULL;
  246. INT_PTR nServerCount = pGlobalUserItem->m_GlobalServerItemArray.GetCount();
  247. //释放用户
  248. if (nServerCount == 0L)
  249. {
  250. //释放索引
  251. m_MapUserID.RemoveKey(dwUserID);
  252. m_MapGameID.RemoveKey(pGlobalUserItem->GetGameID());
  253. //m_MapNickName.RemoveKey(pGlobalUserItem->GetNickName());
  254. //释放对象
  255. FreeGlobalUserItem(pGlobalUserItem);
  256. }
  257. return true;
  258. }
  259. //激活用户
  260. int CGlobalInfoManager::ActiveUserItem(tagGlobalUserInfo & GlobalUserInfo, WORD wServerID)
  261. {
  262. //寻找房间
  263. CGlobalServerItem * pGlobalServerItem = NULL;
  264. if (m_MapServerID.Lookup(wServerID, pGlobalServerItem) == FALSE)
  265. {
  266. return -1;
  267. }
  268. //寻找用户
  269. CGlobalUserItem * pGlobalUserItem = NULL;
  270. if (m_MapUserID.Lookup(GlobalUserInfo.dwUserID, pGlobalUserItem) == FALSE)
  271. {
  272. //创建用户
  273. pGlobalUserItem = CreateGlobalUserItem();
  274. if (pGlobalUserItem == NULL)
  275. {
  276. return -2;
  277. }
  278. //构造昵称
  279. TCHAR szNickName[LEN_NICKNAME] = TEXT("");
  280. //lstrcpyn(szNickName, GlobalUserInfo.szNickName, CountArray(szNickName));
  281. //设置用户
  282. pGlobalUserItem->m_dwUserID = GlobalUserInfo.dwUserID;
  283. pGlobalUserItem->m_dwGameID = GlobalUserInfo.dwGameID;
  284. //lstrcpyn(pGlobalUserItem->m_szNickName, GlobalUserInfo.szNickName, CountArray(pGlobalUserItem->m_szNickName));
  285. //辅助信息
  286. pGlobalUserItem->m_cbGender = GlobalUserInfo.cbGender;
  287. pGlobalUserItem->m_cbMemberOrder = GlobalUserInfo.cbMemberOrder;
  288. pGlobalUserItem->m_cbMasterOrder = GlobalUserInfo.cbMasterOrder;
  289. //昵称索引
  290. //m_MapNickName[szNickName] = pGlobalUserItem;
  291. //设置索引
  292. m_MapUserID[GlobalUserInfo.dwUserID] = pGlobalUserItem;
  293. m_MapGameID[GlobalUserInfo.dwGameID] = pGlobalUserItem;
  294. }
  295. else
  296. {
  297. //重复判断
  298. for (INT_PTR i = 0; i < pGlobalUserItem->m_GlobalServerItemArray.GetCount(); i++)
  299. {
  300. if (pGlobalUserItem->m_GlobalServerItemArray[i]->GetServerID() == wServerID)
  301. {
  302. //原来登陆的游戏节点和现在登陆的游戏节点不一样
  303. if (pGlobalUserItem->m_ServerID != wServerID)
  304. {
  305. return pGlobalUserItem->m_ServerID;
  306. }
  307. return 0;
  308. }
  309. }
  310. }
  311. pGlobalUserItem->m_ServerID = wServerID;
  312. //设置关联
  313. pGlobalUserItem->m_GlobalServerItemArray.Add(pGlobalServerItem);
  314. pGlobalServerItem->m_MapUserID[GlobalUserInfo.dwUserID] = pGlobalUserItem;
  315. return 0;
  316. }
  317. //删除广场
  318. bool CGlobalInfoManager::DeletePlazaItem(WORD wPlazaID)
  319. {
  320. //寻找广场
  321. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  322. if (m_MapPlazaID.Lookup(wPlazaID, pGlobalPlazaItem) == FALSE)
  323. {
  324. CString cstr = L"";
  325. cstr.Format(L"没找到登录服:%d,未removekey", wPlazaID);
  326. //提示消息
  327. CTraceService::TraceString(cstr, TraceLevel_Warning);
  328. return false;
  329. }
  330. //释放广场
  331. m_MapPlazaID.RemoveKey(wPlazaID);
  332. FreeGlobalPlazaItem(pGlobalPlazaItem);
  333. return true;
  334. }
  335. bool CGlobalInfoManager::DeletePlazaItemByServerID(WORD wServerID)
  336. {
  337. WORD wPlazaID = 0L;
  338. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  339. POSITION Position = m_MapPlazaID.GetStartPosition();
  340. while (Position != NULL)
  341. {
  342. m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem);
  343. if (pGlobalPlazaItem != NULL)
  344. {
  345. if (pGlobalPlazaItem->m_GamePlaza.wServerID == wServerID)
  346. {
  347. break;
  348. }
  349. }
  350. }
  351. if (pGlobalPlazaItem != NULL)
  352. {
  353. //释放广场
  354. m_MapPlazaID.RemoveKey(wPlazaID);
  355. FreeGlobalPlazaItem(pGlobalPlazaItem);
  356. return true;
  357. }
  358. return false;
  359. }
  360. //激活广场
  361. bool CGlobalInfoManager::ActivePlazaItem(WORD wBindIndex, tagGamePlaza & GamePlaza)
  362. {
  363. //寻找广场
  364. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  365. if (m_MapPlazaID.Lookup(GamePlaza.wPlazaID, pGlobalPlazaItem) == TRUE)
  366. {
  367. //提示消息
  368. CString cstr = L"";
  369. cstr.Format(L"m_MapPlazaID能找到:%d,不需要激活", GamePlaza.wPlazaID);
  370. CTraceService::TraceString(cstr, TraceLevel_Warning);
  371. //ASSERT(FALSE);
  372. return false;
  373. }
  374. //创建广场
  375. pGlobalPlazaItem = CreateGlobalPlazaItem();
  376. if (pGlobalPlazaItem == NULL)
  377. {
  378. ASSERT(FALSE);
  379. return false;
  380. }
  381. //设置广场
  382. pGlobalPlazaItem->m_wIndex = wBindIndex;
  383. pGlobalPlazaItem->m_GamePlaza = GamePlaza;
  384. //设置索引
  385. m_MapPlazaID[GamePlaza.wPlazaID] = pGlobalPlazaItem;
  386. return true;
  387. }
  388. //删除服务器
  389. bool CGlobalInfoManager::DeleteServerItem(WORD wServerID)
  390. {
  391. //寻找房间
  392. CGlobalServerItem * pGlobalServerItem = NULL;
  393. if (m_MapServerID.Lookup(wServerID, pGlobalServerItem) == FALSE)
  394. {
  395. //ASSERT(FALSE);
  396. return false;
  397. }
  398. POSITION PositionB = NULL;
  399. GOTO1:
  400. PositionB = m_PrivateRoom.GetStartPosition();
  401. while (PositionB != NULL)
  402. {
  403. DWORD dRoomID;
  404. JN_GR_RoomListBig crDate;
  405. ZeroMemory(&crDate, sizeof(crDate));
  406. m_PrivateRoom.GetNextAssoc(PositionB, dRoomID, crDate);
  407. if (crDate.dwServerID == wServerID)
  408. {
  409. //所有服务器发送删除的消息
  410. POSITION Position = NULL;
  411. do
  412. {
  413. //获取对象
  414. CGlobalServerItem * pGlobalServerItem = EnumServerItem(Position);
  415. //设置数据
  416. if (pGlobalServerItem != NULL)
  417. {
  418. crDate.dwInsert_UpData_Del = 2;
  419. if (pGlobalServerItem->GetServerID() != wServerID)
  420. {
  421. m_pCAttemperEngineSink->SendDataToGame(pGlobalServerItem->GetServerID(), MDM_CS_USER_COLLECT, SUB_CS_UPDATAOTHERROOM, &crDate, sizeof(JN_GR_RoomListBig));
  422. }
  423. }
  424. } while (Position != NULL);
  425. m_PrivateRoom.RemoveKey(dRoomID);
  426. CString csTest;
  427. csTest.Format(_T("私有房间数目:%d,服务器关闭,所拥有的房间编号%d->销毁"), m_PrivateRoom.GetSize(), dRoomID);
  428. CTraceService::TraceString(csTest, TraceLevel_Normal);
  429. goto GOTO1;
  430. }
  431. }
  432. POSITION PositionA = NULL;
  433. GOTO2:
  434. //清除该服务器上的桌子信息
  435. PositionA = m_RoomList.GetStartPosition();
  436. while (PositionA != NULL)
  437. {
  438. DWORD dUser;
  439. JN_GR_RoomListGroup crDate;
  440. ZeroMemory(&crDate, sizeof(crDate));
  441. m_RoomList.GetNextAssoc(PositionA, dUser, crDate);
  442. if (crDate.Num > 10) crDate.Num = 10;
  443. for (size_t i = 0; i < crDate.Num; i++)
  444. {
  445. if (crDate.jgrDate[i].dwServerID == wServerID)
  446. {
  447. crDate.jgrDate[i].dwInsert_UpData_Del = 2;
  448. //发送清除命令
  449. CGlobalUserItem * pUser = SearchUserItemByUserID(dUser);
  450. if (pUser)
  451. {
  452. int a = 0;
  453. CGlobalServerItem * p = pUser->EnumServerItem(a);
  454. while (p)
  455. {
  456. if ((p->GetServerID() == pUser->m_ServerID) && pUser->m_ServerID != wServerID)
  457. {
  458. //最近登录的服务器,发送。
  459. m_pCAttemperEngineSink->SendDataToGame(p->GetServerID(), MDM_CS_USER_COLLECT, SUB_CS_UPDATAOWNROOM, &crDate.jgrDate[i], sizeof(JN_GR_RoomListBig));
  460. break;
  461. }
  462. a++;
  463. p = pUser->EnumServerItem(a);
  464. }
  465. }
  466. //删除此项
  467. if (crDate.Num > 0)
  468. {
  469. crDate.jgrDate[i] = crDate.jgrDate[crDate.Num - 1];
  470. i--;
  471. }
  472. if (crDate.Num > 0) crDate.Num--;
  473. if (crDate.Num == 0)
  474. {
  475. //清除这个人的信息
  476. m_RoomList.RemoveKey(dUser);
  477. goto GOTO2;
  478. }
  479. else
  480. {
  481. m_RoomList[dUser] = crDate;
  482. }
  483. }
  484. }
  485. }
  486. //变量定义
  487. DWORD dwUserKey = 0L;
  488. CGlobalUserItem * pGlobalUserItem = NULL;
  489. POSITION Position = pGlobalServerItem->m_MapUserID.GetStartPosition();
  490. //删除用户
  491. while (Position != NULL)
  492. {
  493. //获取数据
  494. pGlobalServerItem->m_MapUserID.GetNextAssoc(Position, dwUserKey, pGlobalUserItem);
  495. //房间关联
  496. for (INT_PTR i = 0; i < pGlobalUserItem->m_GlobalServerItemArray.GetCount(); i++)
  497. {
  498. //获取房间
  499. CGlobalServerItem * pTempServerItem = pGlobalUserItem->m_GlobalServerItemArray[i];
  500. //房间判断
  501. if (pTempServerItem->GetServerID() == wServerID)
  502. {
  503. pGlobalUserItem->m_GlobalServerItemArray.RemoveAt(i);
  504. break;
  505. }
  506. }
  507. //释放用户
  508. if (pGlobalUserItem->m_GlobalServerItemArray.GetCount() == 0)
  509. {
  510. m_MapUserID.RemoveKey(dwUserKey);
  511. FreeGlobalUserItem(pGlobalUserItem);
  512. }
  513. }
  514. //释放房间
  515. m_MapServerID.RemoveKey(wServerID);
  516. FreeGlobalServerItem(pGlobalServerItem);
  517. CString csTest;
  518. csTest.Format(_T("服务器%d->销毁"), wServerID);
  519. CTraceService::TraceString(csTest, TraceLevel_Normal);
  520. return true;
  521. }
  522. //激活房间
  523. bool CGlobalInfoManager::ActiveServerItem(WORD wBindIndex, tagGameServer & GameServer)
  524. {
  525. //寻找房间
  526. CGlobalServerItem * pGlobalServerItem = NULL;
  527. if (m_MapServerID.Lookup(GameServer.wServerID, pGlobalServerItem) == TRUE)
  528. {
  529. //提示消息
  530. CString cstr = L"";
  531. cstr.Format(L"m_MapServerID能找到:%d,不需要激活", GameServer.wServerID);
  532. CTraceService::TraceString(cstr, TraceLevel_Warning);
  533. ASSERT(FALSE);
  534. return false;
  535. }
  536. //创建房间
  537. pGlobalServerItem = CreateGlobalServerItem();
  538. if (pGlobalServerItem == NULL)
  539. {
  540. ASSERT(FALSE);
  541. return false;
  542. }
  543. //设置房间
  544. pGlobalServerItem->m_wIndex = wBindIndex;
  545. pGlobalServerItem->m_GameServer = GameServer;
  546. //设置索引
  547. m_MapServerID[GameServer.wServerID] = pGlobalServerItem;
  548. return true;
  549. }
  550. //寻找广场
  551. CGlobalPlazaItem * CGlobalInfoManager::SearchPlazaItem(WORD wPlazaID)
  552. {
  553. //寻找房间
  554. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  555. m_MapPlazaID.Lookup(wPlazaID, pGlobalPlazaItem);
  556. return pGlobalPlazaItem;
  557. }
  558. ///--- add by yd 通过 登录服务器ID查找
  559. CGlobalPlazaItem * CGlobalInfoManager::SearchPlazaItemByServerID(WORD wServerID)
  560. {
  561. WORD wPlazaID = 0L;
  562. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  563. POSITION Position = m_MapPlazaID.GetStartPosition();
  564. while (Position != NULL)
  565. {
  566. m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem);
  567. if (pGlobalPlazaItem != NULL)
  568. {
  569. if (pGlobalPlazaItem->m_GamePlaza.wServerID == wServerID)
  570. {
  571. return pGlobalPlazaItem;
  572. }
  573. }
  574. }
  575. return NULL;
  576. }
  577. //寻找房间
  578. CGlobalServerItem * CGlobalInfoManager::SearchServerItem(WORD wServerID)
  579. {
  580. //寻找房间
  581. CGlobalServerItem * pGlobalServerItem = NULL;
  582. m_MapServerID.Lookup(wServerID, pGlobalServerItem);
  583. return pGlobalServerItem;
  584. }
  585. //寻找用户
  586. CGlobalUserItem * CGlobalInfoManager::SearchUserItemByUserID(DWORD dwUserID)
  587. {
  588. //寻找用户
  589. CGlobalUserItem * pGlobalUserItem = NULL;
  590. m_MapUserID.Lookup(dwUserID, pGlobalUserItem);
  591. return pGlobalUserItem;
  592. }
  593. //寻找用户
  594. CGlobalUserItem * CGlobalInfoManager::SearchUserItemByGameID(DWORD dwGameID)
  595. {
  596. //寻找用户
  597. CGlobalUserItem * pGlobalUserItem = NULL;
  598. m_MapGameID.Lookup(dwGameID, pGlobalUserItem);
  599. return pGlobalUserItem;
  600. }
  601. //寻找用户
  602. //CGlobalUserItem * CGlobalInfoManager::SearchUserItemByNickName(LPCTSTR pszNickName)
  603. //{
  604. //寻找用户
  605. // VOID * pGlobalUserItem = NULL;
  606. //m_MapNickName.Lookup(pszNickName, pGlobalUserItem);
  607. // return (CGlobalUserItem *)pGlobalUserItem;
  608. //}
  609. //枚举用户
  610. CGlobalUserItem * CGlobalInfoManager::EnumUserItem(POSITION & Position)
  611. {
  612. //变量定义
  613. DWORD dwUserID = 0L;
  614. CGlobalUserItem * pGlobalUserItem = NULL;
  615. //获取对象
  616. if (Position == NULL) Position = m_MapUserID.GetStartPosition();
  617. if (Position != NULL) m_MapUserID.GetNextAssoc(Position, dwUserID, pGlobalUserItem);
  618. return pGlobalUserItem;
  619. }
  620. //枚举广场
  621. CGlobalPlazaItem * CGlobalInfoManager::EnumPlazaItem(POSITION & Position)
  622. {
  623. //变量定义
  624. WORD wPlazaID = 0L;
  625. CGlobalPlazaItem * pGlobalPlazaItem = NULL;
  626. //获取对象
  627. if (Position == NULL) Position = m_MapPlazaID.GetStartPosition();
  628. if (Position != NULL) m_MapPlazaID.GetNextAssoc(Position, wPlazaID, pGlobalPlazaItem);
  629. return pGlobalPlazaItem;
  630. }
  631. //枚举房间
  632. CGlobalServerItem * CGlobalInfoManager::EnumServerItem(POSITION & Position)
  633. {
  634. //变量定义
  635. WORD wServerID = 0L;
  636. CGlobalServerItem * pGlobalServerItem = NULL;
  637. //获取对象
  638. if (Position == NULL) Position = m_MapServerID.GetStartPosition();
  639. if (Position != NULL) m_MapServerID.GetNextAssoc(Position, wServerID, pGlobalServerItem);
  640. return pGlobalServerItem;
  641. }
  642. //创建用户
  643. CGlobalUserItem * CGlobalInfoManager::CreateGlobalUserItem()
  644. {
  645. //使用存储
  646. if (m_pGlobalUserItem != NULL)
  647. {
  648. CGlobalUserItem * pGlobalUserItem = m_pGlobalUserItem;
  649. m_pGlobalUserItem = m_pGlobalUserItem->m_pNextUserItemPtr;
  650. pGlobalUserItem->m_pNextUserItemPtr = NULL;
  651. return pGlobalUserItem;
  652. }
  653. //创建对象
  654. try
  655. {
  656. CGlobalUserItem * pGlobalUserItem = new CGlobalUserItem;
  657. return pGlobalUserItem;
  658. }
  659. catch (...) {}
  660. return NULL;
  661. }
  662. //创建广场
  663. CGlobalPlazaItem * CGlobalInfoManager::CreateGlobalPlazaItem()
  664. {
  665. //使用存储
  666. if (m_pGlobalPlazaItem != NULL)
  667. {
  668. CGlobalPlazaItem * pGlobalPlazaItem = m_pGlobalPlazaItem;
  669. m_pGlobalPlazaItem = m_pGlobalPlazaItem->m_pNextPlazaItemPtr;
  670. pGlobalPlazaItem->m_pNextPlazaItemPtr = NULL;
  671. return pGlobalPlazaItem;
  672. }
  673. //创建对象
  674. try
  675. {
  676. CGlobalPlazaItem * pGlobalPlazaItem = new CGlobalPlazaItem;
  677. return pGlobalPlazaItem;
  678. }
  679. catch (...) {}
  680. return NULL;
  681. }
  682. //创建房间
  683. CGlobalServerItem * CGlobalInfoManager::CreateGlobalServerItem()
  684. {
  685. //使用存储
  686. if (m_pGlobalServerItem != NULL)
  687. {
  688. CGlobalServerItem * pGlobalServerItem = m_pGlobalServerItem;
  689. m_pGlobalServerItem = m_pGlobalServerItem->m_pNextServerItemPtr;
  690. pGlobalServerItem->m_pNextServerItemPtr = NULL;
  691. return pGlobalServerItem;
  692. }
  693. //创建对象
  694. try
  695. {
  696. CGlobalServerItem * pGlobalServerItem = new CGlobalServerItem;
  697. return pGlobalServerItem;
  698. }
  699. catch (...) {}
  700. return NULL;
  701. }
  702. //释放用户
  703. bool CGlobalInfoManager::FreeGlobalUserItem(CGlobalUserItem * pGlobalUserItem)
  704. {
  705. //效验参数
  706. ASSERT(pGlobalUserItem != NULL);
  707. if (pGlobalUserItem == NULL) return false;
  708. //设置变量
  709. pGlobalUserItem->m_dwUserID = 0L;
  710. pGlobalUserItem->m_dwGameID = 0L;
  711. // pGlobalUserItem->m_szNickName[0] = 0;
  712. pGlobalUserItem->m_GlobalServerItemArray.RemoveAll();
  713. //加入存储
  714. pGlobalUserItem->m_pNextUserItemPtr = m_pGlobalUserItem;
  715. m_pGlobalUserItem = pGlobalUserItem;
  716. return true;
  717. }
  718. //释放广场
  719. bool CGlobalInfoManager::FreeGlobalPlazaItem(CGlobalPlazaItem * pGlobalPlazaItem)
  720. {
  721. //效验参数
  722. ASSERT(pGlobalPlazaItem != NULL);
  723. if (pGlobalPlazaItem == NULL) return false;
  724. //设置变量
  725. pGlobalPlazaItem->m_wIndex = 0;
  726. ZeroMemory(&pGlobalPlazaItem->m_GamePlaza, sizeof(pGlobalPlazaItem->m_GamePlaza));
  727. if (m_pGlobalPlazaItem == NULL )
  728. {
  729. //加入存储
  730. pGlobalPlazaItem->m_pNextPlazaItemPtr = m_pGlobalPlazaItem;
  731. m_pGlobalPlazaItem = pGlobalPlazaItem;
  732. //提示消息
  733. CString cstr = L"";
  734. cstr.Format(L"m_pNextPlazaItemPtr指向初始化pGlobalPlazaItem类指针");
  735. CTraceService::TraceString(cstr, TraceLevel_Normal);
  736. }
  737. else
  738. {
  739. SafeDelete(pGlobalPlazaItem);
  740. //提示消息
  741. CString cstr = L"";
  742. cstr.Format(L"释放pGlobalPlazaItem类指针");
  743. CTraceService::TraceString(cstr, TraceLevel_Normal);
  744. }
  745. return true;
  746. }
  747. //释放房间
  748. bool CGlobalInfoManager::FreeGlobalServerItem(CGlobalServerItem * pGlobalServerItem)
  749. {
  750. //效验参数
  751. ASSERT(pGlobalServerItem != NULL);
  752. if (pGlobalServerItem == NULL) return false;
  753. //设置索引
  754. pGlobalServerItem->m_MapUserID.RemoveAll();
  755. //设置变量
  756. pGlobalServerItem->m_wIndex = 0;
  757. ZeroMemory(&pGlobalServerItem->m_GameServer, sizeof(pGlobalServerItem->m_GameServer));
  758. //加入存储
  759. pGlobalServerItem->m_pNextServerItemPtr = m_pGlobalServerItem;
  760. m_pGlobalServerItem = pGlobalServerItem;
  761. return true;
  762. }
  763. //////////////////////////////////////////////////////////////////////////////////