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

704 lines
19 KiB

  1. #include "StdAfx.h"
  2. #include "AndroidUserItem.h"
  3. #include "../../MessageDef/Pb_GameInfo.pb.h"
  4. #include "../../GlobalDef/Util.h"
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //静态变量
  7. CTimerItemArray CAndroidUserItem::m_TimerItemBuffer; //库存数组
  8. //////////////////////////////////////////////////////////////////////////////////
  9. //构造函数
  10. CAndroidUserItem::CAndroidUserItem()
  11. {
  12. //索引变量
  13. m_wRoundID = 1;
  14. m_wAndroidIndex = INVALID_WORD;
  15. //接口变量
  16. m_pIServerUserManager = NULL;
  17. m_pIAndroidUserManager = NULL;
  18. m_pIAndroidUserItemSink = NULL;
  19. //状态变量
  20. m_bWaitLeave = false;
  21. m_bStartClient = false;
  22. m_wAndroidAction = 0;
  23. m_dwPlayInnings = 0;
  24. m_cbGameStatus = GAME_STATUS_FREE;
  25. //用户状态
  26. m_CurrentUserStatus.cbUserStatus = US_NULL;
  27. m_CurrentUserStatus.wChairID = INVALID_CHAIR;
  28. m_CurrentUserStatus.wTableID = INVALID_TABLE;
  29. //绑定变量
  30. m_pIServerUserItem = NULL;
  31. //时间变量
  32. m_dwMinSitInterval = 0;
  33. m_dwMaxSitInterval = 0;
  34. m_dwStandupTickCount = 0;
  35. m_dwReposeTickCount = 0;
  36. //状态信息
  37. ZeroMemory(&m_AndroidService, sizeof(m_AndroidService));
  38. ZeroMemory(&m_AndroidItemConfig, sizeof(m_AndroidItemConfig));
  39. return;
  40. }
  41. //析构函数
  42. CAndroidUserItem::~CAndroidUserItem()
  43. {
  44. //删除时间
  45. KillGameTimer(0);
  46. //释放对象
  47. SafeRelease(m_pIAndroidUserItemSink);
  48. return;
  49. }
  50. //接口查询
  51. VOID * CAndroidUserItem::QueryInterface(REFGUID Guid, DWORD dwQueryVer)
  52. {
  53. QUERYINTERFACE(IAndroidUserItem, Guid, dwQueryVer);
  54. QUERYINTERFACE_IUNKNOWNEX(IAndroidUserItem, Guid, dwQueryVer);
  55. return NULL;
  56. }
  57. //获取 I D
  58. DWORD CAndroidUserItem::GetUserID()
  59. {
  60. return m_AndroidItemConfig.AndroidAccountsInfo.dwUserID;
  61. }
  62. //桌子号码
  63. WORD CAndroidUserItem::GetTableID()
  64. {
  65. //效验状态
  66. ASSERT(m_pIServerUserItem != NULL);
  67. if (m_pIServerUserItem == NULL) return INVALID_TABLE;
  68. return m_pIServerUserItem->GetTableID();
  69. }
  70. //椅子号码
  71. WORD CAndroidUserItem::GetChairID()
  72. {
  73. //效验状态
  74. ASSERT(m_pIServerUserItem != NULL);
  75. if (m_pIServerUserItem == NULL) return INVALID_CHAIR;
  76. return m_pIServerUserItem->GetChairID();
  77. }
  78. //获取自己
  79. IServerUserItem * CAndroidUserItem::GetMeUserItem()
  80. {
  81. return m_pIServerUserItem;
  82. }
  83. //游戏用户
  84. IServerUserItem * CAndroidUserItem::GetTableUserItem(WORD wChariID)
  85. {
  86. return NULL;
  87. }
  88. //发送函数
  89. bool CAndroidUserItem::SendSocketData(WORD wSubCmdID)
  90. {
  91. //状态效验
  92. ASSERT(m_pIServerUserItem != NULL);
  93. if (m_pIServerUserItem == NULL) return false;
  94. //发送数据
  95. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  96. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GF_GAME, wSubCmdID, NULL, 0);
  97. return true;
  98. }
  99. //存入游戏币
  100. bool CAndroidUserItem::PerformSaveScore(SCORE lScore)
  101. {
  102. //状态效验
  103. ASSERT(m_pIServerUserItem != NULL);
  104. if (m_pIServerUserItem == NULL) return false;
  105. //效验游戏币
  106. ASSERT(m_pIServerUserItem->GetUserScore() >= lScore);
  107. if (m_pIServerUserItem->GetUserScore() < lScore) return false;
  108. //修改游戏币
  109. m_pIServerUserItem->ModifyUserInsure(-lScore, 0L, 0L);
  110. return true;
  111. }
  112. //提取游戏币
  113. bool CAndroidUserItem::PerformTakeScore(SCORE lScore)
  114. {
  115. //状态效验
  116. ASSERT(m_pIServerUserItem != NULL);
  117. if (m_pIServerUserItem == NULL) return false;
  118. //修改游戏币
  119. m_pIServerUserItem->ModifyUserInsure(lScore, 0L, 0L);
  120. return true;
  121. }
  122. //发送函数
  123. bool CAndroidUserItem::SendSocketData(WORD wSubCmdID, VOID * pData, WORD wDataSize)
  124. {
  125. //状态效验
  126. ASSERT(m_pIServerUserItem != NULL);
  127. if (m_pIServerUserItem == NULL) return false;
  128. //发送数据
  129. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  130. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GF_GAME, wSubCmdID, pData, wDataSize);
  131. return true;
  132. }
  133. //机器动作
  134. bool CAndroidUserItem::JudgeAndroidActionAndRemove(WORD wAction)
  135. {
  136. //变量定义
  137. bool bResult = (m_wAndroidAction&wAction) != 0;
  138. //移除动作
  139. if (bResult == true)
  140. {
  141. m_wAndroidAction &= ~wAction;
  142. //离开标识
  143. if (wAction == ANDROID_WAITLEAVE) m_bWaitLeave = true;
  144. }
  145. return bResult;
  146. }
  147. //删除时间
  148. bool CAndroidUserItem::KillGameTimer(UINT nTimerID)
  149. {
  150. //删除时间
  151. if (nTimerID != 0)
  152. {
  153. //寻找子项
  154. for (INT_PTR i = 0; i < m_TimerItemActive.GetCount(); i++)
  155. {
  156. //获取时间
  157. tagTimerItem * pTimerItem = m_TimerItemActive[i];
  158. //删除判断
  159. if (pTimerItem->nTimerID == nTimerID)
  160. {
  161. m_TimerItemActive.RemoveAt(i);
  162. m_TimerItemBuffer.Add(pTimerItem);
  163. return true;
  164. }
  165. }
  166. }
  167. else
  168. {
  169. m_TimerItemBuffer.Append(m_TimerItemActive);
  170. m_TimerItemActive.RemoveAll();
  171. }
  172. return false;
  173. }
  174. //设置时间
  175. bool CAndroidUserItem::SetGameTimer(UINT nTimerID, UINT nElapse)
  176. {
  177. //寻找子项
  178. for (INT_PTR i = 0; i < m_TimerItemActive.GetCount(); i++)
  179. {
  180. //获取时间
  181. tagTimerItem * pTimerItem = m_TimerItemActive[i];
  182. //设置判断
  183. if (pTimerItem->nTimerID == nTimerID)
  184. {
  185. pTimerItem->nTimeLeave = nElapse;
  186. return true;
  187. }
  188. }
  189. //变量定义
  190. tagTimerItem * pTimerItem = NULL;
  191. WORD wStorageCount = (WORD)m_TimerItemBuffer.GetCount();
  192. //库存子项
  193. if (wStorageCount > 0)
  194. {
  195. //获取对象
  196. pTimerItem = m_TimerItemBuffer[wStorageCount - 1];
  197. //加入数组
  198. m_TimerItemActive.Add(pTimerItem);
  199. m_TimerItemBuffer.RemoveAt(wStorageCount - 1);
  200. }
  201. //创建子项
  202. if (pTimerItem == NULL)
  203. {
  204. try
  205. {
  206. //创建对象
  207. pTimerItem = new tagTimerItem;
  208. if (pTimerItem == NULL) return false;
  209. //加入数组
  210. m_TimerItemActive.Add(pTimerItem);
  211. }
  212. catch (...)
  213. {
  214. ASSERT(FALSE);
  215. return false;
  216. }
  217. }
  218. //设置变量
  219. pTimerItem->nTimerID = nTimerID;
  220. pTimerItem->nTimeLeave = nElapse;
  221. return true;
  222. }
  223. //发送准备
  224. bool CAndroidUserItem::SendUserReady(VOID * pData, WORD wDataSize)
  225. {
  226. //状态效验
  227. // ASSERT((m_pIServerUserItem!=NULL)&&(m_pIServerUserItem->GetUserStatus()==US_SIT));
  228. if ((m_pIServerUserItem == NULL) || (m_pIServerUserItem->GetUserStatus() != US_SIT)) return false;
  229. //发送准备
  230. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  231. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GF_FRAME, SUB_GF_USER_READY, pData, wDataSize);
  232. return true;
  233. }
  234. //发送聊天
  235. bool CAndroidUserItem::SendChatMessage(DWORD dwTargetUserID, LPCTSTR pszChatString, COLORREF crColor)
  236. {
  237. //效验用户
  238. ASSERT(m_pIServerUserItem != NULL);
  239. if (m_pIServerUserItem == NULL) return false;
  240. //构造信息
  241. CMD_GF_C_UserChat UserChat;
  242. lstrcpyn(UserChat.szChatString, pszChatString, CountArray(UserChat.szChatString));
  243. //构造数据
  244. UserChat.dwChatColor = crColor;
  245. UserChat.dwTargetUserID = dwTargetUserID;
  246. UserChat.wChatLength = CountStringBuffer(UserChat.szChatString);
  247. //发送命令
  248. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  249. WORD wSendSize = sizeof(UserChat)-sizeof(UserChat.szChatString) + UserChat.wChatLength*sizeof(TCHAR);
  250. GameInfo::PB_CS_UserChat Chat;
  251. Chat.set_dwchatcolor(UserChat.dwChatColor);
  252. Chat.set_wchatlength(UserChat.wChatLength);
  253. Chat.set_dwtargetuserid(UserChat.dwTargetUserID);
  254. std::string szChatString = CW2AEX<1024>(UserChat.szChatString, CP_UTF8).m_psz;
  255. Chat.set_szchatstring(szChatString);
  256. //发送数据
  257. std::string pbdata = Chat.SerializePartialAsString();
  258. //发送消息
  259. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GF_FRAME, SUB_GF_USER_CHAT, (void*)pbdata.c_str(), pbdata.length());
  260. return true;
  261. }
  262. //时间事件
  263. bool CAndroidUserItem::OnTimerPulse(DWORD dwTimerID, WPARAM dwBindParameter)
  264. {
  265. //寻找子项
  266. for (INT_PTR i = 0; i < m_TimerItemActive.GetCount();)
  267. {
  268. //变量定义
  269. tagTimerItem * pTimerItem = m_TimerItemActive[i];
  270. //时间处理
  271. if (pTimerItem->nTimeLeave <= 1L)
  272. {
  273. //设置数组
  274. m_TimerItemActive.RemoveAt(i);
  275. m_TimerItemBuffer.Add(pTimerItem);
  276. //时间通知
  277. if (m_pIAndroidUserItemSink != NULL)
  278. {
  279. m_pIAndroidUserItemSink->OnEventTimer(pTimerItem->nTimerID);
  280. }
  281. }
  282. else
  283. {
  284. //设置变量
  285. i++;
  286. pTimerItem->nTimeLeave--;
  287. }
  288. }
  289. return true;
  290. }
  291. //网络消息
  292. bool CAndroidUserItem::OnSocketRead(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
  293. {
  294. //登录失败
  295. if ((wMainCmdID == MDM_GR_LOGON) && (wSubCmdID == SUB_GR_LOGON_FAILURE))
  296. {
  297. return OnSocketSubLogonFailure(pData, wDataSize);
  298. }
  299. //登录完成
  300. if ((wMainCmdID == MDM_GR_LOGON) && (wSubCmdID == SUB_GR_LOGON_FINISH))
  301. {
  302. return OnSocketSubLogonFinish(pData, wDataSize);
  303. }
  304. //用户状态
  305. if ((wMainCmdID == MDM_GR_USER) && (wSubCmdID == SUB_GR_USER_STATUS))
  306. {
  307. return OnSocketSubUserStatus(pData, wDataSize);
  308. }
  309. //游戏消息
  310. if ((wMainCmdID == MDM_GF_GAME) || (wMainCmdID == MDM_GF_FRAME))
  311. {
  312. return OnSocketGameMessage(wMainCmdID, wSubCmdID, pData, wDataSize);
  313. }
  314. //系统消息
  315. if ((wMainCmdID == MDM_CM_SYSTEM) && (wSubCmdID == SUB_CM_SYSTEM_MESSAGE))
  316. {
  317. return OnSocketSubSystemMessage(pData, wDataSize);
  318. }
  319. return true;
  320. }
  321. //游戏消息
  322. bool CAndroidUserItem::OnSocketGameMessage(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
  323. {
  324. //游戏处理
  325. if ((wMainCmdID == MDM_GF_GAME) && (m_pIAndroidUserItemSink != NULL))
  326. {
  327. return m_pIAndroidUserItemSink->OnEventGameMessage(wSubCmdID, pData, wDataSize);
  328. }
  329. //框架处理
  330. if (wMainCmdID == MDM_GF_FRAME)
  331. {
  332. //默认处理
  333. switch (wSubCmdID)
  334. {
  335. case SUB_GF_GAME_STATUS: //游戏状态
  336. {
  337. ////效验参数
  338. //GameInfo::PB_CS_GameStatus GameStatus;
  339. //GameStatus.ParseFromArray(pData, wDataSize);
  340. ////处理消息
  341. //CMD_GF_GameStatus pGameStatus;
  342. //ZeroMemory(&pGameStatus, sizeof(pGameStatus));
  343. //pGameStatus.cbGameStatus = GameStatus.cbgamestatus();
  344. //pGameStatus.cbAllowLookon = GameStatus.cballowlookon();
  345. //效验参数
  346. ASSERT(wDataSize == sizeof(CMD_GF_GameStatus));
  347. if (wDataSize != sizeof(CMD_GF_GameStatus)) return false;
  348. //消息处理
  349. CMD_GF_GameStatus* pGameStatus = (CMD_GF_GameStatus*)pData;
  350. //设置变量
  351. m_cbGameStatus = pGameStatus->cbGameStatus;
  352. return true;
  353. }
  354. case SUB_GF_GAME_SCENE: //游戏场景
  355. {
  356. //游戏处理
  357. if (m_pIAndroidUserItemSink != NULL)
  358. {
  359. bool bLookonUser = (m_pIServerUserItem->GetUserStatus() == US_LOOKON);
  360. return m_pIAndroidUserItemSink->OnEventSceneMessage(m_cbGameStatus, bLookonUser, pData, wDataSize);
  361. }
  362. else
  363. {
  364. //发送开始
  365. IServerUserItem * pIServerUserItem = GetMeUserItem();
  366. if (pIServerUserItem->GetUserStatus() != US_READY) SendUserReady(NULL, 0);
  367. }
  368. return true;
  369. }
  370. case SUB_GF_USER_READY: //用户准备
  371. {
  372. if (m_pIServerUserItem->GetUserStatus() >= US_READY)
  373. return true;
  374. //发送开始
  375. SendUserReady(NULL, 0);
  376. return true;
  377. }
  378. default:
  379. {
  380. if (m_pIAndroidUserItemSink != NULL)
  381. return m_pIAndroidUserItemSink->OnEventFrameMessage(wSubCmdID, pData, wDataSize);
  382. break;
  383. }
  384. }
  385. }
  386. return true;
  387. }
  388. //登录失败
  389. bool CAndroidUserItem::OnSocketSubLogonFailure(VOID * pData, WORD wDataSize)
  390. {
  391. return true;
  392. }
  393. //登录完成
  394. bool CAndroidUserItem::OnSocketSubLogonFinish(VOID * pData, WORD wDataSize)
  395. {
  396. //设置变量
  397. m_cbGameStatus = GAME_STATUS_FREE;
  398. m_pIServerUserItem = m_pIServerUserManager->SearchUserItem(m_AndroidItemConfig.AndroidAccountsInfo.dwUserID);
  399. //状态效验
  400. ASSERT(m_pIServerUserItem != NULL);
  401. if (m_pIServerUserItem == NULL) return false;
  402. //用户状态
  403. m_CurrentUserStatus.wChairID = m_pIServerUserItem->GetChairID();
  404. m_CurrentUserStatus.wTableID = m_pIServerUserItem->GetTableID();
  405. m_CurrentUserStatus.cbUserStatus = m_pIServerUserItem->GetUserStatus();
  406. //规则变量
  407. CMD_GR_UserRule UserRule;
  408. ZeroMemory(&UserRule, sizeof(UserRule));
  409. //发送规则
  410. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  411. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GR_USER, SUB_GR_USER_RULE, &UserRule, sizeof(UserRule));
  412. //设置时间
  413. m_dwStandupTickCount = (DWORD)time(NULL);
  414. m_dwReposeTickCount = m_dwMinSitInterval + rand() % (__max(m_dwMaxSitInterval - m_dwMinSitInterval, 1));
  415. //重入判断
  416. if (m_pIServerUserItem->GetTableID() != INVALID_TABLE)
  417. {
  418. StartGameClient();
  419. }
  420. return true;
  421. }
  422. //用户状态
  423. bool CAndroidUserItem::OnSocketSubUserStatus(VOID * pData, WORD wDataSize)
  424. {
  425. //效验参数
  426. ASSERT(wDataSize == sizeof(CMD_GR_UserStatus));
  427. if (wDataSize < sizeof(CMD_GR_UserStatus)) return false;
  428. //变量定义
  429. CMD_GR_UserStatus * pUserStatus = (CMD_GR_UserStatus *)pData;
  430. //玩家判断
  431. if (pUserStatus->dwUserID != m_AndroidItemConfig.AndroidAccountsInfo.dwUserID)
  432. {
  433. return true;
  434. }
  435. //用户状态
  436. tagUserStatus LastUserStatus;
  437. CopyMemory(&LastUserStatus, &m_CurrentUserStatus, sizeof(LastUserStatus));
  438. CopyMemory(&m_CurrentUserStatus, &pUserStatus->UserStatus, sizeof(m_CurrentUserStatus));
  439. //开始切换
  440. if ((LastUserStatus.cbUserStatus != US_READY) && (m_CurrentUserStatus.cbUserStatus == US_READY))
  441. {
  442. }
  443. //机器起立
  444. if (m_CurrentUserStatus.cbUserStatus == US_FREE)
  445. {
  446. //设置局数
  447. m_dwPlayInnings = 0;
  448. m_wAndroidAction = 0;
  449. //设置时间
  450. m_dwStandupTickCount = (DWORD)time(NULL);
  451. m_dwReposeTickCount = m_dwMinSitInterval + rand() % (__max(m_dwMaxSitInterval - m_dwMinSitInterval, 1));
  452. }
  453. //游戏开始
  454. if (m_CurrentUserStatus.cbUserStatus == US_PLAYING)
  455. {
  456. m_dwPlayInnings++;
  457. }
  458. //坐下状态
  459. if (m_CurrentUserStatus.cbUserStatus == US_SIT)
  460. {
  461. if (m_AndroidService.dwSwitchTableInnings > 0 &&
  462. m_AndroidService.dwSwitchTableInnings <= m_dwPlayInnings)
  463. {
  464. //设置动作
  465. m_dwPlayInnings = 0;
  466. m_wAndroidAction |= ANDROID_WAITSTANDUP;
  467. }
  468. }
  469. //关闭判断
  470. if ((m_bStartClient == true) && (m_CurrentUserStatus.wTableID == INVALID_TABLE))
  471. {
  472. //关闭游戏
  473. CloseGameClient();
  474. return true;
  475. }
  476. //启动判断
  477. if ((m_bStartClient == false) && (m_CurrentUserStatus.wTableID != INVALID_TABLE))
  478. {
  479. //启动游戏
  480. StartGameClient();
  481. return true;
  482. }
  483. return true;
  484. }
  485. //系统消息
  486. bool CAndroidUserItem::OnSocketSubSystemMessage(VOID * pData, WORD wDataSize)
  487. {
  488. //变量定义
  489. CMD_CM_SystemMessage * pSystemMessage = (CMD_CM_SystemMessage *)pData;
  490. WORD wHeadSize = sizeof(CMD_CM_SystemMessage)-sizeof(pSystemMessage->szString);
  491. //效验参数
  492. ASSERT((wDataSize > wHeadSize) && (wDataSize == (wHeadSize + pSystemMessage->wLength*sizeof(TCHAR))));
  493. if ((wDataSize <= wHeadSize) || (wDataSize != (wHeadSize + pSystemMessage->wLength*sizeof(TCHAR)))) return false;
  494. //关闭处理
  495. //if ((pSystemMessage->wType&(SMT_CLOSE_ROOM | SMT_CLOSE_LINK)) != 0)
  496. //{
  497. // //关闭处理
  498. // DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  499. // m_pIAndroidUserManager->DeleteAndroidUserItem(dwAndroidID, true);
  500. // }
  501. return true;
  502. }
  503. //启动游戏
  504. VOID CAndroidUserItem::StartGameClient()
  505. {
  506. //状态判断
  507. ASSERT((m_bStartClient == false) && (m_pIServerUserItem != NULL));
  508. ASSERT((m_pIServerUserItem->GetTableID() != INVALID_TABLE) && (m_pIServerUserItem->GetChairID() != INVALID_CHAIR));
  509. //设置变量
  510. m_bStartClient = true;
  511. //变量定义
  512. CMD_GF_GameOption GameOption;
  513. ZeroMemory(&GameOption, sizeof(GameOption));
  514. //构造数据
  515. GameOption.cbAllowLookon = FALSE;
  516. GameOption.dwFrameVersion = INVALID_DWORD;
  517. GameOption.dwClientVersion = INVALID_DWORD;
  518. //发送数据
  519. DWORD dwAndroidID = MAKELONG(m_wAndroidIndex, m_wRoundID);
  520. m_pIAndroidUserManager->SendDataToServer(dwAndroidID, MDM_GF_FRAME, SUB_GF_GAME_OPTION, &GameOption, sizeof(GameOption));
  521. return;
  522. }
  523. //关闭游戏
  524. VOID CAndroidUserItem::CloseGameClient()
  525. {
  526. //状态判断
  527. ASSERT((m_bStartClient == true) && (m_pIServerUserItem != NULL));
  528. ASSERT((m_pIServerUserItem->GetTableID() == INVALID_TABLE) && (m_pIServerUserItem->GetChairID() == INVALID_CHAIR));
  529. //删除时间
  530. KillGameTimer(0);
  531. //设置变量
  532. m_bStartClient = false;
  533. m_cbGameStatus = GAME_STATUS_FREE;
  534. //游戏复位
  535. if (m_pIAndroidUserItemSink != NULL)
  536. {
  537. m_pIAndroidUserItemSink->RepositionSink();
  538. }
  539. return;
  540. }
  541. //复位数据
  542. VOID CAndroidUserItem::RepositUserItem()
  543. {
  544. //状态变量
  545. m_bWaitLeave = false;
  546. m_bStartClient = false;
  547. m_wAndroidAction = 0;
  548. m_dwPlayInnings = 0;
  549. m_cbGameStatus = GAME_STATUS_FREE;
  550. //用户状态
  551. m_CurrentUserStatus.cbUserStatus = US_NULL;
  552. m_CurrentUserStatus.wChairID = INVALID_CHAIR;
  553. m_CurrentUserStatus.wTableID = INVALID_TABLE;
  554. //绑定变量
  555. m_pIServerUserItem = NULL;
  556. //时间变量
  557. m_dwMinSitInterval = 0;
  558. m_dwMaxSitInterval = 0;
  559. m_dwStandupTickCount = 0;
  560. m_dwReposeTickCount = 0;
  561. //状态信息
  562. ZeroMemory(&m_AndroidService, sizeof(m_AndroidService));
  563. ZeroMemory(&m_AndroidItemConfig, sizeof(m_AndroidItemConfig));
  564. //删除时间
  565. m_TimerItemBuffer.Append(m_TimerItemActive);
  566. m_TimerItemActive.RemoveAll();
  567. //索引变量
  568. m_wRoundID = __max(1, m_wRoundID + 1);
  569. //复位游戏
  570. if (m_pIAndroidUserItemSink != NULL)
  571. {
  572. m_pIAndroidUserItemSink->RepositionSink();
  573. }
  574. return;
  575. }
  576. //////////////////////////////////////////////////////////////////////////////////