CServerItem.js 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246
  1. var GameExitCode_Normal = 0; //正常退出
  2. var GameExitCode_CreateFailed = 1; //创建失败
  3. var GameExitCode_Timeout = 2; //定时到时
  4. var GameExitCode_Shutdown = 3; //断开连接
  5. var CServerItem = cc.Class({
  6. extends: cc.Component,
  7. properties: {
  8. },
  9. ctor: function () {
  10. this.mReqTableID = INVALID_TABLE;
  11. this.mServiceStatus = ServiceStatus_Unknow;
  12. this.mGameServer = null;
  13. this.mServerAttribute = null;
  14. this.mSocketEngine = null;
  15. this.mIStringMessageSink = null;
  16. this.mUserManager = null;
  17. this.mMeUserItem = 0;
  18. this.mUserAttribute = null;
  19. this.mReconnecting = false;
  20. this.mInterval = null;
  21. this.mIntervalTime = 0;
  22. this.mServerHeartTime = 0;
  23. this.mHeartStatTime = 0;
  24. },
  25. //设置接口
  26. SetServerItemSink: function (pIServerItemSink) {
  27. this.mServerAttribute = new tagServerAttribute();
  28. this.mUserManager = new CPlazaUserManager(this);
  29. this.mUserAttribute = new tagUserAttribute();
  30. this.mIServerItemSink = pIServerItemSink;
  31. return true;
  32. },
  33. //设置接口
  34. SetStringMessageSink: function (pIStringMessageSink) {
  35. this.mIStringMessageSink = pIStringMessageSink;
  36. return true;
  37. },
  38. //比赛框架
  39. GetMatchViewFrame: function () {
  40. return this.mMatchViewFrame;
  41. },
  42. //房间属性
  43. GetServerAttribute: function () {
  44. return this.mServerAttribute;
  45. },
  46. //设置状态
  47. SetServiceStatus: function (ServiceStatus) {
  48. //设置变量
  49. this.mServiceStatus = ServiceStatus;
  50. console.log("状态--",this.mServiceStatus)
  51. },
  52. //是否服务状态
  53. IsService: function () {
  54. return this.mServiceStatus == ServiceStatus_ServiceIng;
  55. },
  56. //服务状态
  57. GetServiceStatus: function () {
  58. return this.mServiceStatus;
  59. },
  60. //自己位置
  61. GetMeUserItem: function () {
  62. return this.mMeUserItem;
  63. },
  64. //配置房间
  65. SetServerAttribute: function (pGameServerItem, wAVServerPort, dwAVServerAddr) {
  66. //房间属性
  67. this.mGameServer = pGameServerItem;
  68. this.mServerAttribute.wKindID = this.mGameServer.wKindID;
  69. this.mServerAttribute.wServerID = this.mGameServer.wServerID;
  70. this.mServerAttribute.wAVServerPort = this.mGameServer.wAVServerPort;
  71. this.mServerAttribute.dwAVServerAddr = this.mGameServer.dwAVServerAddr;
  72. this.mServerAttribute.szServerName = this.mGameServer.szServerName;
  73. return true;
  74. },
  75. //配置房间
  76. ConnectServer: function (pGameServerItem, wAVServerPort, dwAVServerAddr) {
  77. if (this.mServiceStatus != ServiceStatus_Unknow && this.mServiceStatus != ServiceStatus_NetworkDown) {
  78. if (this.mIStringMessageSink)
  79. this.mIStringMessageSink.InsertPromptString("很抱歉,此遊戲房間還未關閉,請先關閉!!" + this.mServiceStatus);
  80. return false;
  81. }
  82. //房间属性
  83. this.SetServerAttribute(pGameServerItem, wAVServerPort, dwAVServerAddr);
  84. //关闭判断
  85. if (this.mServerAttribute.wServerID == 0) {
  86. this.SetServiceStatus(ServiceStatus_Unknow);
  87. if (this.mIStringMessageSink)
  88. this.mIStringMessageSink.InsertPromptString("很抱歉,此遊戲房間已經關閉了,不允許繼續進入!");
  89. return false;
  90. }
  91. //创建组件
  92. this.mSocketEngine = new cc.CSocketEngine(this);
  93. let portadd = window.GAME_PORT_ADD + this.mGameServer.wServerPort;
  94. console.log("网络IP--2", this.mGameServer.szServerAddr, this.mGameServer.wServerPort, portadd)
  95. if (window.OPEN_DOMAIN_NET&&cc.sys.isNative!= cc.sys.os) {
  96. let addr = this.mGameServer.szServerAddr;
  97. let port = this.mGameServer.wServerPort;
  98. if (port == window.PORT_GAME_MJ1) {
  99. addr = window.DOMAIN_GAME_MJ1;
  100. } else if (port == window.PORT_GAME_MJ2) {
  101. addr = window.DOMAIN_GAME_MJ2;
  102. }
  103. this.mSocketEngine.connect(addr, 443);
  104. } else {
  105. this.mSocketEngine.connect(this.mGameServer.szServerAddr, portadd);
  106. }
  107. //设置状态
  108. this.SetServiceStatus(ServiceStatus_Entering);
  109. return true;
  110. },
  111. OnErr: function () {
  112. if (this.mIServerItemSink) return this.mIServerItemSink.OnGFServerReLink();
  113. },
  114. //发送登录
  115. SendLogonPacket: function () {
  116. //变量定义
  117. var LogonUserID = new CMD_GR_LogonUserID();
  118. //变量定义
  119. var pGlobalUserData = g_GlobalUserInfo.GetGlobalUserData();
  120. //登录信息
  121. LogonUserID.dwUserID = pGlobalUserData.dwUserID;
  122. LogonUserID.szPassword = pGlobalUserData.szDynamicPass;
  123. LogonUserID.szServerPasswd = LogonUserID.szServerPasswd;
  124. LogonUserID.wKindID = this.mServerAttribute.wKindID;
  125. LogonUserID.szMachineID = 'creator';
  126. //发送数据
  127. this.SendSocketClass(MDM_GR_LOGON, SUB_GR_LOGON_USERID, LogonUserID);
  128. return true;
  129. },
  130. //发送函数
  131. SendSocketData: function (wMainCmdID, wSubCmdID, data, dataSize) {
  132. return this.mSocketEngine.send(wMainCmdID, wSubCmdID, data, dataSize);
  133. },
  134. //发送函数
  135. SendSocketClass: function (wMainCmdID, wSubCmdID, Obj) {
  136. return this.mSocketEngine.sendClass(wMainCmdID, wSubCmdID, Obj);
  137. },
  138. //////////////////////////////////////////////////////////////////////////
  139. // Socket消息
  140. // 发送数据
  141. GFSendData: function (main, sub, data, size) {
  142. return this.SendSocketData(main, sub, data, size);
  143. },
  144. //中断连接
  145. IntermitConnect: function (bBackLobby) {
  146. if (this.mServiceStatus == ServiceStatus_Unknow || this.mServiceStatus == ServiceStatus_NetworkDown) return false;//
  147. if (this.IsService()) {
  148. var kernel = gClientKernel.get();
  149. if (kernel) kernel.Intermit(0);
  150. }
  151. this.mIServerItemSink = null;
  152. this.mIntervalTime = new Date().getTime();
  153. this.mInterval = bBackLobby;
  154. return true;
  155. },
  156. CloseSocket: function (dt) {
  157. //设置状态
  158. this.SetServiceStatus(ServiceStatus_NetworkDown);
  159. this.mSocketEngine.closesocket();
  160. this.mReqTableID = INVALID_TABLE;
  161. this.mReqChairID = INVALID_CHAIR;
  162. this.mIsGameReady = false;
  163. this.mMeUserItem = 0;
  164. this.mServerHeartTime = 0;
  165. this.mUserManager.ResetUserItem(true);
  166. var kernel = gClientKernel.get();
  167. if (kernel) kernel.ResetUserItem();
  168. },
  169. update: function (dt) {
  170. if (!this.mInterval) return;
  171. //检查锁屏
  172. var timestamp = new Date().getTime();
  173. if (timestamp - this.mIntervalTime >= 500) {
  174. this.mInterval = null;
  175. this.CloseSocket();
  176. gClientKernel.destory();
  177. ChangeScene('Lobby');
  178. }
  179. },
  180. //游戏已准备好
  181. OnGFGameReady: function () {
  182. //变量定义
  183. var wTableID = this.mMeUserItem.GetTableID();
  184. var wChairID = this.mMeUserItem.GetChairID();
  185. var dwMeUserID = this.mMeUserItem.GetUserID();
  186. var pClientKernel = gClientKernel.get();
  187. this.mUserAttribute.wChairID = wChairID;
  188. this.mUserAttribute.wTableID = wTableID;
  189. //房间信息
  190. pClientKernel.OnGFConfigServer(this.mUserAttribute, this.mServerAttribute);
  191. pClientKernel.OnGFUserEnter(this.mMeUserItem);
  192. //发送用户
  193. if ((wTableID != INVALID_TABLE) && (wChairID != INVALID_CHAIR)) {
  194. //变量定义
  195. var wEnumIndex = 0;
  196. //发送玩家
  197. while (true) {
  198. //获取用户
  199. var pIClientUserItem = this.mUserManager.EnumUserItem(wEnumIndex++);
  200. if (pIClientUserItem == 0) break;
  201. //发送判断
  202. if (pIClientUserItem.GetUserID() == dwMeUserID) continue;
  203. if (pIClientUserItem.GetTableID() != wTableID) continue;
  204. if (pIClientUserItem.GetUserStatus() == US_LOOKON) continue;
  205. //发送用户
  206. pClientKernel.OnGFUserEnter(pIClientUserItem);
  207. };
  208. //旁观用户
  209. wEnumIndex = 0;
  210. while (true) {
  211. //获取用户
  212. pIClientUserItem = this.mUserManager.EnumUserItem(wEnumIndex++);
  213. if (pIClientUserItem == 0) break;
  214. //发送判断
  215. if (pIClientUserItem.GetUserID() == dwMeUserID) continue;
  216. if (pIClientUserItem.GetTableID() != wTableID) continue;
  217. if (pIClientUserItem.GetUserStatus() != US_LOOKON) continue;
  218. //发送用户
  219. pClientKernel.OnGFUserEnter(pIClientUserItem);
  220. };
  221. }
  222. //配置完成
  223. pClientKernel.OnGFConfigFinish();
  224. this.mIsGameReady = true;
  225. },
  226. //游戏关闭
  227. OnGFGameClose: function (iExitCode) {
  228. //效验状态
  229. if (this.mMeUserItem == 0) return;
  230. this.mIsGameReady = false;
  231. //变量定义
  232. var wTableID = this.mMeUserItem.GetTableID();
  233. var wChairID = this.mMeUserItem.GetChairID();
  234. var cbUserStatus = this.mMeUserItem.GetUserStatus();
  235. this.mUserAttribute.wChairID = INVALID_CHAIR;
  236. this.mUserAttribute.wTableID = INVALID_TABLE;
  237. //退出游戏
  238. if ((wTableID != INVALID_TABLE) && (this.mServiceStatus == ServiceStatus_ServiceIng)) {
  239. console.log("起立1")
  240. this.SendStandUpPacket(wTableID, wChairID, 1);
  241. }
  242. this.mTableViewFrame.SetTableStatus1(false);
  243. },
  244. onEventTCPSocketLink: function () {
  245. this.mServerHeartTime = new Date().getTime();
  246. if (this.mIServerItemSink) this.mIServerItemSink.StopLoading();
  247. if (window.ReLinkTime != null) {
  248. if (window.LOG_NET_DATA) console.log("onEventTCPSocketLink " + window.ReLinkTime)
  249. window.ReLinkTime = null;
  250. var kernel = gClientKernel.get();
  251. kernel.mIClientKernelSink.OnClearScene();
  252. if (kernel.mIClientKernelSink.m_DisCtrl && kernel.mIClientKernelSink.m_DisCtrl.node.active) {
  253. kernel.mIClientKernelSink.m_DisCtrl.node.active = false;
  254. g_TimerEngine.UnPauseGameTimer();
  255. }
  256. }
  257. this.SendLogonPacket();
  258. },
  259. onEventTCPSocketShut: function () {
  260. //设置状态
  261. this.SetServiceStatus(ServiceStatus_NetworkDown);
  262. if (this.mIServerItemSink && this.mInterval != null) return this.mIServerItemSink.OnGFServerReLink();
  263. },
  264. onEventTCPSocketRead: function (main, sub, data, dataSize) {
  265. console.log("CServerItem消息", main, sub)
  266. //try {
  267. switch (main) {
  268. //登录消息
  269. case MDM_GR_LOGON: return this.OnSocketMainLogon(sub, data, dataSize);
  270. //配置信息
  271. case MDM_GR_CONFIG: return this.OnSocketMainConfig(sub, data, dataSize);
  272. //用户信息
  273. case MDM_GR_USER: return this.OnSocketMainUser(sub, data, dataSize);
  274. //状态信息
  275. case MDM_GR_STATUS: return this.OnSocketMainStatus(sub, data, dataSize);
  276. //银行消息
  277. case MDM_GR_INSURE: return OnSocketMainInsure(sub, data, dataSize);
  278. //管理消息
  279. case MDM_GR_MANAGE: return OnSocketMainManager(sub, data, dataSize);
  280. //管理消息
  281. case MDM_CM_SYSTEM: return this.OnSocketMainSystem(sub, data, dataSize);
  282. //游戏消息
  283. case MDM_GF_GAME:
  284. case MDM_GF_CARDROOM:
  285. case MDM_GF_FRAME: return this.OnSocketMainGameFrame(main, sub, data, dataSize);
  286. //比赛消息
  287. case MDM_GR_MATCH: return this.OnSocketMainMatch(sub, data, dataSize);
  288. }
  289. return true;
  290. /*} catch (error) {
  291. if(window.LOG_NET_DATA)console.log('onEventTCPSocketRead err!!! '+main+'-'+sub+' size:'+dataSize)
  292. if(window.LOG_NET_DATA)console.log(error)
  293. }*/
  294. },
  295. //登录消息
  296. OnSocketMainLogon: function (sub, data, dataSize) {
  297. switch (sub) {
  298. //登录成功
  299. case SUB_GR_LOGON_SUCCESS: return this.OnSocketSubLogonSuccess(data, dataSize);
  300. //登录失败
  301. case SUB_GR_LOGON_ERROR: return this.onSocketSubLogonFailure(data, dataSize);
  302. //登录完成
  303. case SUB_GR_LOGON_FINISH: return this.OnSocketSubLogonFinish(data, dataSize);
  304. //更新提示
  305. case SUB_GR_UPDATE_NOTIFY: return this.OnSocketSubUpdateNotify(data, dataSize);
  306. }
  307. return true;
  308. },
  309. //配置信息
  310. OnSocketMainConfig: function (sub, data, dataSize) {
  311. switch (sub) {
  312. //房间配置
  313. case SUB_GR_CONFIG_SERVER: return this.OnSocketSubConfigServer(data, dataSize);
  314. //列表配置
  315. case SUB_GR_CONFIG_COLUMN: return true;
  316. //道具配置
  317. case SUB_GR_CONFIG_PROPERTY: return true;
  318. //配置玩家权限
  319. case SUB_GR_CONFIG_USER_RIGHT: return true;
  320. //配置完成
  321. case SUB_GR_CONFIG_FINISH: return true;
  322. }
  323. return true;
  324. },
  325. //比赛消息
  326. OnSocketMainMatch: function (sub, data, dataSize) {
  327. switch (sub) {
  328. //费用查询
  329. case SUB_GR_MATCH_FEE: return this.OnSocketSubMatchFee(data, dataSize);
  330. //金币更新
  331. case SUB_GR_MATCH_GOLDUPDATE: return this.OnSocketSubMatchGold(data, dataSize);
  332. }
  333. return this.mMatchViewFrame.OnEventViewData(sub, data, dataSize);
  334. },
  335. //心跳消息
  336. OnSocketHeart: function () {
  337. if (this.mInterval != null) return true;
  338. //服务器端返回的心跳
  339. this.mServerHeartTime = new Date().getTime();
  340. window.g_NetResponseTime = this.mServerHeartTime - this.mHeartStatTime;
  341. return true;
  342. },
  343. //比赛费用
  344. OnSocketSubMatchFee: function (data, dataSize) {
  345. var pMatchFee = new CMD_GR_Match_Fee();
  346. //参数效验
  347. if (dataSize > pMatchFee.getSize()) return false;
  348. //提取数据
  349. pMatchFee.lMatchFee = gCByte.r4(data, pMatchFee.index_lMatchFee);
  350. pMatchFee.szNotifyContent = gCByte.rStr(data, pMatchFee.index_szNotifyContent);
  351. if (pMatchFee.lMatchFee > 0) {
  352. if (this.mIStringMessageSink) {
  353. this.mIStringMessageSink.InsertMatchJoinString(pMatchFee.lMatchFee);
  354. }
  355. }
  356. return true;
  357. },
  358. //更新金币
  359. OnSocketSubMatchGold: function (data, dataSize) {
  360. var pMatchGoldUpdate = new CMD_GR_MatchGoldUpdate();
  361. //参数校验
  362. if (pMatchGoldUpdate.getSize() != dataSize) return false;
  363. //提取数据
  364. pMatchGoldUpdate.lCurrGold = gCByte.r8(data, pMatchGoldUpdate.index_lCurrGold);
  365. pMatchGoldUpdate.lCurrIngot = gCByte.r8(data, pMatchGoldUpdate.index_lCurrIngot);
  366. pMatchGoldUpdate.dwCurrExprience = gCByte.r4(data, pMatchGoldUpdate.index_dwCurrExprience);
  367. //变量定义
  368. var pGlobalUserData = g_GlobalUserInfo.GetGlobalUserData();
  369. //设置变量
  370. pGlobalUserData.llUserScore = pMatchGoldUpdate.lCurrGold;
  371. pGlobalUserData.llUserIngot = pMatchGoldUpdate.lCurrIngot;
  372. pGlobalUserData.dwExperience = pMatchGoldUpdate.dwCurrExprience;
  373. return true;
  374. },
  375. //登录失败
  376. onSocketSubLogonFailure: function (data, size) {
  377. //变量定义
  378. var pLogonFailure = new CMD_GR_LogonFailure();
  379. gCByte.Bytes2Str(pLogonFailure, data);
  380. //显示消息
  381. if (this.mIStringMessageSink)
  382. this.mIStringMessageSink.InsertPromptStringAndClose(pLogonFailure.szErrorDescribe);
  383. return true;
  384. },
  385. //登录成功
  386. OnSocketSubLogonSuccess: function (data, dataSize) {
  387. this.mIsQuickSitDown = false;
  388. //设置状态
  389. this.SetServiceStatus(ServiceStatus_RecvInfo);
  390. //if (this.mIServerItemSink)
  391. // this.mIServerItemSink.OnGRLogonSuccess();
  392. return true;
  393. },
  394. //登录完成
  395. OnSocketSubLogonFinish: function (data, dataSize) {
  396. //设置状态
  397. this.SetServiceStatus(ServiceStatus_ServiceIng);
  398. this.mUserAttribute.dwUserID = this.mMeUserItem.GetUserID();
  399. this.mUserAttribute.wChairID = INVALID_CHAIR;
  400. this.mUserAttribute.wTableID = INVALID_TABLE;
  401. if (this.mIServerItemSink)
  402. this.mIServerItemSink.OnGRLogonFinish();
  403. return true;
  404. },
  405. //登录完成
  406. OnSocketSubUpdateNotify: function (data, dataSize) {
  407. if (this.mIServerItemSink)
  408. this.mIStringMessageSink.InsertPromptStringAndClose("遊戲版本不匹配");
  409. return true;
  410. },
  411. //房间配置
  412. OnSocketSubConfigServer: function (data, dataSize) {
  413. var pConfigServer = new CMD_GR_ConfigServer();
  414. //效验数据
  415. if (dataSize < gCByte.Bytes2Str(pConfigServer, data)) return false;
  416. //消息处理
  417. //房间属性
  418. this.mServerAttribute.wServerType = pConfigServer.wServerType;
  419. this.mServerAttribute.dwServerRule = pConfigServer.dwServerRule;
  420. this.mServerAttribute.wTableCount = pConfigServer.wTableCount;
  421. this.mServerAttribute.wChairCount = pConfigServer.wChairCount;
  422. if (!this.mTableViewFrame.ConfigTableFrame(
  423. this.mServerAttribute.wTableCount,
  424. this.mServerAttribute.wChairCount,
  425. this.mServerAttribute.dwServerRule,
  426. this.mServerAttribute.wServerType,
  427. this.mServerAttribute.wServerID)) {
  428. this.IntermitConnect(true);
  429. return false;
  430. }
  431. return true;
  432. },
  433. //用户处理
  434. OnSocketMainUser: function (sub, data, dataSize) {
  435. switch (sub) {
  436. //请求坐下失败
  437. case SUB_GR_REQUEST_FAILURE: return this.OnSocketSubRequestFailure(data, dataSize);
  438. //邀请玩家
  439. case SUB_GR_USER_INVITE: return OnSocketSubUserInvite(data, dataSize);
  440. //等待分配
  441. case SUB_GR_USER_WAIT_DISTRIBUTE: return OnSocketSubWaitDistribute(data, dataSize);
  442. //用户进入
  443. case SUB_GR_USER_ENTER: return this.OnSocketSubUserEnter(data, dataSize);
  444. //用户积分
  445. case SUB_GR_USER_SCORE: return this.OnSocketSubUserScore(data, dataSize);
  446. //用户状态
  447. case SUB_GR_USER_STATUS: return this.OnSocketSubUserStatus(data, dataSize);
  448. //道具成功
  449. case SUB_GR_PROPERTY_SUCCESS: return OnSocketSubPropertySuccess(data, dataSize);
  450. //道具失败
  451. case SUB_GR_PROPERTY_FAILURE: return OnSocketSubPropertyFailure(data, dataSize);
  452. //道具效应
  453. case SUB_GR_PROPERTY_EFFECT: return OnSocketSubPropertyEffect(data, dataSize);
  454. //礼物消息
  455. case SUB_GR_PROPERTY_MESSAGE: return OnSocketSubPropertyMessage(data, dataSize);
  456. //喇叭消息
  457. case SUB_GR_PROPERTY_TRUMPET: return OnSocketSubPropertyTrumpet(data, dataSize);
  458. case SUB_GR_USER_QUEUE_COM: return OnSocketSubQueueCom(data, dataSize);
  459. case SUB_GR_USER_GAME_DATA:
  460. if (window.LOG_NET_DATA) console.log("the fucking user game data!!!!!")
  461. return true;
  462. }
  463. return true;
  464. },
  465. //请求失败
  466. OnSocketSubRequestFailure: function (data, dataSize) {
  467. //变量定义
  468. var pRequestFailure = new CMD_GR_RequestFailure();
  469. gCByte.Bytes2Str(pRequestFailure, data);
  470. //变量定义
  471. var pITableUserItem = 0;
  472. var wMeTableID = this.mMeUserItem.GetTableID();
  473. var wMeChairID = this.mMeUserItem.GetChairID();
  474. //界面还原
  475. if ((this.mReqTableID != INVALID_TABLE) && (this.mReqChairID != INVALID_TABLE) && (this.mReqChairID != MAX_CHAIR)) {
  476. var pITableUserItem = this.mTableViewFrame.GetClientUserItem(this.mReqTableID, this.mReqChairID);
  477. if (pITableUserItem == this.mMeUserItem)
  478. this.mTableViewFrame.SetClientUserItem2(this.mReqTableID, this.mReqChairID, null);
  479. }
  480. //设置变量
  481. this.mReqTableID = INVALID_TABLE;
  482. this.mReqChairID = INVALID_CHAIR;
  483. if (this.mIsQuickSitDown) {
  484. this.mIsQuickSitDown = false;
  485. /*
  486. if (CServerRule::IsAllowQuickMode(mServerAttribute.dwServerRule))
  487. {//快速坐下,防作弊模式
  488. if (mIServerItemSink)
  489. {
  490. char szDescribeString[256*4];
  491. UtoA(pRequestFailure->szDescribeString, szDescribeString, sizeof(pRequestFailure->szDescribeString));
  492. mIServerItemSink->OnGFServerClose(szDescribeString);
  493. }
  494. }
  495. */
  496. } else {
  497. //提示消息
  498. if (this.mIServerItemSink)
  499. this.mIServerItemSink.onGRRequestFailure(pRequestFailure.szDescribeString);
  500. }
  501. return true;
  502. },
  503. //用户积分
  504. OnSocketSubUserScore: function (data, dataSize) {
  505. // 创建一个CMD_GR_UserScore对象实例
  506. var pUserScore = new CMD_GR_UserScore();
  507. // 校验接收到的数据大小是否与CMD_GR_UserScore对象解析后的数据大小一致
  508. // 使用gCByte.Bytes2Str方法将字节数据转换为字符串,并与dataSize进行比较
  509. // 如果不一致,返回false,表示数据校验失败
  510. if (dataSize != gCByte.Bytes2Str(pUserScore, data)) return false;
  511. console.log("用户积分--1", pUserScore);
  512. // 根据用户ID从用户管理器中搜索对应的用户项
  513. // pUserScore.dwUserID包含了要查找的用户ID
  514. var pIClientUserItem = this.mUserManager.SearchUserByUserID(pUserScore.dwUserID);
  515. // 判断用户项是否存在
  516. // 如果用户项不存在(返回0),则不需要进一步处理,直接返回true
  517. // 注意:这里的判断条件应该是pIClientUserItem === null 或 pIClientUserItem === undefined,
  518. // 根据实际代码逻辑,0可能是为了表示未找到用户,这在某些特定实现中可能是合理的
  519. if (pIClientUserItem == 0) return true;
  520. // 获取全局用户数据
  521. // pGlobalUserData是一个包含全局用户信息的对象
  522. var pGlobalUserData = g_GlobalUserInfo.GetGlobalUserData();
  523. // 更新全局用户数据中的用户分数和金币数
  524. // 首先检查全局用户数据中的dwUserID是否与接收到的用户ID一致
  525. if (pGlobalUserData.dwUserID == pUserScore.dwUserID) {
  526. // 如果服务器类型为GAME_GENRE_GOLD,则更新用户的分数
  527. // 注意:这里假设llUserScore是用户的分数,llIngot是用户的金币数
  528. if (this.mServerAttribute.wServerType == GAME_GENRE_GOLD) {
  529. pGlobalUserData.llUserScore = pUserScore.UserScore.llScore;
  530. }
  531. // 无论服务器类型如何,都更新用户的金币数
  532. pGlobalUserData.llUserIngot = pUserScore.UserScore.llIngot;
  533. }
  534. // 更新用户管理器中用户项的分数
  535. // this.mUserManager.UpdateUserItemScore方法用于更新用户项的分数
  536. this.mUserManager.UpdateUserItemScore(pIClientUserItem, pUserScore.UserScore);
  537. // 返回true,表示数据处理成功
  538. return true;
  539. },
  540. //用户进入
  541. OnSocketSubUserEnter: function (data, dataSize) {
  542. //消息处理
  543. var pUserInfoHead = new tagUserInfoHead();
  544. var readSize = gCByte.Bytes2Str(pUserInfoHead, data);
  545. //效验参数
  546. if (dataSize < readSize) return false;
  547. //变量定义
  548. var DataDescribe = new tagDataDescribe();
  549. var UserInfo = new tagUserInfo();
  550. var InfoObj = new Object();
  551. InfoObj.szStr = '';
  552. InfoObj.len_szStr = 0;
  553. //扩展信息
  554. while (readSize < dataSize) {
  555. readSize += gCByte.Bytes2Str(DataDescribe, data, readSize);
  556. if (DataDescribe.wDataDescribe == DTP_NULL) break;
  557. InfoObj.len_szStr = DataDescribe.wDataSize;
  558. readSize += gCByte.Bytes2Str(InfoObj, data, readSize);
  559. switch (DataDescribe.wDataDescribe) {
  560. case DTP_GR_NICK_NAME: //用户昵称
  561. {
  562. UserInfo.szNickName = InfoObj.szStr;
  563. break;
  564. }
  565. case DTP_GR_GROUP_NAME: //用户社团
  566. {
  567. UserInfo.szGroupName = InfoObj.szStr;
  568. break;
  569. }
  570. case DTP_GR_UNDER_WRITE: //个性签名
  571. {
  572. UserInfo.szUnderWrite = InfoObj.szStr;
  573. break;
  574. }
  575. case DTP_GR_MOBILE_PHONE: //个性签名
  576. {
  577. UserInfo.szMobilePhone = InfoObj.szStr;
  578. break;
  579. }
  580. case DTP_GR_IP: //个性签名
  581. {
  582. UserInfo.szClientIP = InfoObj.szStr;
  583. break;
  584. }
  585. }
  586. }
  587. //var CustomFaceInfo = new tagCustomFaceInfo();
  588. //用户属性
  589. gCByte.StrSameMemCopy(UserInfo, pUserInfoHead);
  590. //激活用户
  591. var pIClientUserItem = this.mUserManager.SearchUserByUserID(UserInfo.dwUserID);
  592. if (pIClientUserItem == 0) {
  593. pIClientUserItem = this.mUserManager.ActiveUserItem(UserInfo/*, CustomFaceInfo*/);
  594. }
  595. //获取对象
  596. var pServerListData = g_ServerListData;
  597. //人数更新
  598. //if (pServerListData)
  599. // pServerListData.SetServerOnLineCount(this.mServerAttribute.wServerID, this.mUserManager.GetActiveUserCount());
  600. console.log("用户进入OnSocketSubUserEnter", pUserInfoHead)
  601. return true;
  602. },
  603. OnUserItemAcitve: function (pIClientUserItem) {
  604. //判断自己
  605. var pGlobalUserData = g_GlobalUserInfo.GetGlobalUserData();
  606. if (pGlobalUserData.dwUserID == pIClientUserItem.m_UserInfo.dwUserID) {
  607. this.mMeUserItem = pIClientUserItem;
  608. // console.log("用户活跃",this.mMeUserItem)
  609. }
  610. //设置桌子
  611. var cbUserStatus = pIClientUserItem.GetUserStatus();
  612. if ((cbUserStatus >= US_SIT) && (cbUserStatus != US_LOOKON)) {
  613. var wTableID = pIClientUserItem.GetTableID();
  614. var wChairID = pIClientUserItem.GetChairID();
  615. this.mTableViewFrame.SetClientUserItem2(wTableID, wChairID, pIClientUserItem);
  616. }
  617. },
  618. //状态信息
  619. OnSocketMainStatus: function (sub, data, dataSize) {
  620. switch (sub) {
  621. //桌子信息
  622. case SUB_GR_TABLE_INFO: return this.OnSocketSubStatusTableInfo(data, dataSize);
  623. //桌子状态
  624. case SUB_GR_TABLE_STATUS: return this.OnSocketSubStatusTableStatus(data, dataSize);
  625. }
  626. return true;
  627. },
  628. //桌子信息
  629. OnSocketSubStatusTableInfo: function (data, dataSize) {
  630. //变量定义
  631. var pTableInfo = new CMD_GR_TableInfo();
  632. if (dataSize < gCByte.Bytes2Str(pTableInfo, data)) return false;
  633. pTableInfo.TableStatusArray = new Array();
  634. for (var i = 0; i < pTableInfo.wTableCount; i++) {
  635. pTableInfo.TableStatusArray[i] = new tagTableStatus();
  636. }
  637. if (dataSize != gCByte.Bytes2Str(pTableInfo, data)) return false;
  638. //桌子状态
  639. for (var i = 0; i < pTableInfo.wTableCount; i++) {
  640. var cbTableLock = pTableInfo.TableStatusArray[i].cbTableLock;
  641. var cbPlayStatus = pTableInfo.TableStatusArray[i].cbPlayStatus;
  642. this.mTableViewFrame.SetTableStatus(i, (cbPlayStatus == true), (cbTableLock == true));
  643. }
  644. return true;
  645. },
  646. //桌子状态
  647. OnSocketSubStatusTableStatus: function (data, dataSize) {
  648. var pTableStatus = new CMD_GR_TableStatus();
  649. //效验参数
  650. if (dataSize != gCByte.Bytes2Str(pTableStatus, data)) return false;
  651. //设置桌子
  652. var cbTableLock = pTableStatus.TableStatus.cbTableLock;
  653. var cbPlayStatus = pTableStatus.TableStatus.cbPlayStatus;
  654. this.mTableViewFrame.SetTableStatus(pTableStatus.wTableID, (cbPlayStatus == true), (cbTableLock == true));
  655. //设置桌子
  656. if (cbPlayStatus == true && this.mMeUserItem.GetTableID() == pTableStatus.wTableID) {
  657. this.mTableViewFrame.SetTableStatus1(false);
  658. }
  659. return true;
  660. },
  661. //系统消息
  662. OnSocketMainSystem: function (sub, data, dataSize) {
  663. switch (sub) {
  664. //系统消息
  665. case SUB_CM_SYSTEM_MESSAGE: return this.OnSocketSubSystemMessage(data, dataSize);
  666. //动作消息
  667. case SUB_CM_ACTION_MESSAGE: return OnSocketSubActionMessage(data, dataSize);
  668. }
  669. return true;
  670. },
  671. //系统消息
  672. OnSocketSubSystemMessage: function (data, dataSize) {
  673. var message = new CMD_CM_SystemMessage();
  674. gCByte.Bytes2Str(message, data);
  675. console.log("系统消息CServerItem", message)
  676. //关闭游戏
  677. if (message.wType & (SMT_CLOSE_ROOM | SMT_CLOSE_LINK | SMT_CLOSE_GAME)) {
  678. if (gClientKernel.get())
  679. gClientKernel.get().Intermit(GameExitCode_Shutdown);
  680. }
  681. //关闭游戏
  682. if (message.wType & (SMT_CLOSE_ROOM | SMT_CLOSE_LINK)) {
  683. //this.IntermitConnect(true);
  684. }
  685. //弹出消息
  686. if (message.wType & SMT_EJECT) {
  687. if (this.mIStringMessageSink)
  688. this.mIStringMessageSink.InsertPromptString(message.szString);
  689. }
  690. //关闭处理
  691. if ((message.wType & (SMT_CLOSE_ROOM | SMT_CLOSE_LINK)) != 0) {
  692. //时间延迟
  693. //if (this.mIServerItemSink)
  694. // this.mIServerItemSink.OnGFServerClose(sString);
  695. }
  696. return true;
  697. },
  698. //执行起立
  699. PerformStandUpAction: function (wTableID, wChairID) {
  700. if (!this.IsService())
  701. return false;
  702. //状态过滤
  703. if (this.mServiceStatus != ServiceStatus_ServiceIng) return false;
  704. if ((this.mReqTableID == wTableID) && (this.mReqChairID == wChairID)) return false;
  705. //设置变量
  706. this.mReqTableID = INVALID_TABLE;
  707. this.mReqChairID = INVALID_CHAIR;
  708. this.mFindTableID = INVALID_TABLE;
  709. //设置界面
  710. this.mTableViewFrame.VisibleTable(wTableID);
  711. var kernel = gClientKernel.get();
  712. if (kernel) {
  713. kernel.Intermit(false);
  714. } else {
  715. console.log("起立2")
  716. this.SendStandUpPacket(wTableID, wChairID, 0);
  717. }
  718. return true;
  719. },
  720. //执行坐下
  721. PerformSitDownAction: function (wTableID, wChairID, bEfficacyPass) {
  722. if (window.LOG_NET_DATA) console.log("執行坐下", wTableID, wChairID);
  723. if (!this.IsService()) return false;
  724. //状态过滤
  725. if (this.mServiceStatus != ServiceStatus_ServiceIng) return false;
  726. if ((this.mReqTableID != INVALID_TABLE) && (this.mReqTableID == wTableID)) return false;
  727. if ((this.mReqChairID != INVALID_CHAIR) && (this.mReqChairID == wChairID)) return false;
  728. if ((wTableID != INVALID_TABLE) && (wChairID != INVALID_CHAIR)) {
  729. var pINowUserItem = this.mTableViewFrame.GetClientUserItem(wTableID, wChairID);
  730. if (pINowUserItem != null) return true;
  731. }
  732. //自己状态
  733. if (this.mMeUserItem.GetUserStatus() >= US_PLAYING) {
  734. return true;
  735. //提示消息
  736. if (this.mIStringMessageSink)
  737. this.mIStringMessageSink.InsertPromptString("您正在遊戲中,暫時不能離開,請先結束當前遊戲!");
  738. return false;
  739. }
  740. //清理界面
  741. if ((this.mReqTableID != INVALID_TABLE) && (this.mReqChairID != INVALID_CHAIR) && (this.mReqChairID != MAX_CHAIR)) {
  742. pIClientUserItem = this.mTableViewFrame.GetClientUserItem(this.mReqTableID, this.mReqChairID);
  743. if (pIClientUserItem == this.mMeUserItem) this.mTableViewFrame.SetClientUserItem2(mReqTableID, mReqChairID, null);
  744. }
  745. //设置界面
  746. if ((wChairID != MAX_CHAIR) && (wTableID != INVALID_TABLE) && (wChairID != INVALID_CHAIR)) {
  747. this.mTableViewFrame.VisibleTable(wTableID);
  748. this.mTableViewFrame.SetClientUserItem2(wTableID, wChairID, this.mMeUserItem);
  749. }
  750. //设置变量
  751. this.mReqTableID = wTableID;
  752. this.mReqChairID = wChairID;
  753. this.mFindTableID = INVALID_TABLE;
  754. //发送命令
  755. this.SendSitDownPacket(wTableID, wChairID, "");
  756. return true;
  757. },
  758. //执行坐下
  759. PerformEnterRoom: function () {
  760. if (window.LOG_NET_DATA) console.log("进入房间 ", window.g_dwRoomID);
  761. if (!this.IsService()) return false;
  762. //状态过滤
  763. if (this.mServiceStatus != ServiceStatus_ServiceIng) return false;
  764. //自己状态
  765. if (this.mMeUserItem.GetUserStatus() >= US_PLAYING && this.mMeUserItem.GetTableID() != INVALID_CHAIR) {
  766. return true;
  767. //提示消息
  768. if (this.mIStringMessageSink)
  769. this.mIStringMessageSink.InsertPromptString("您正在遊戲中,暫時不能離開,請先結束當前遊戲!");
  770. return false;
  771. }
  772. /*
  773. //清理界面
  774. if ((this.mReqTableID!=INVALID_TABLE)&&(this.mReqChairID!=INVALID_CHAIR)&&(this.mReqChairID!=MAX_CHAIR)){
  775. pIClientUserItem = this.mTableViewFrame.GetClientUserItem(this.mReqTableID, this.mReqChairID);
  776. if (pIClientUserItem == this.mMeUserItem) this.mTableViewFrame.SetClientUserItem2(mReqTableID, mReqChairID, null);
  777. }
  778. //设置界面
  779. if ((wChairID!=MAX_CHAIR)&&(wTableID!=INVALID_TABLE)&&(wChairID!=INVALID_CHAIR)){
  780. this.mTableViewFrame.VisibleTable(wTableID);
  781. this.mTableViewFrame.SetClientUserItem2(wTableID, wChairID, this.mMeUserItem);
  782. }
  783. */
  784. //发送命令
  785. //if(g_ServerListDataLast.wServerType & (GAME_GENRE_PERSONAL|GAME_GENRE_CLUB)){
  786. if (window.g_dwRoomID > 0) {
  787. var UserSitDown = new CMD_GR_UserEnterRoom();
  788. UserSitDown.dwRoomID = window.g_dwRoomID;
  789. UserSitDown.dwClubID = window.g_dwClubID;
  790. console.log("进入房间 SUB_GR_USER_ENTER_ROOM")
  791. this.SendSocketClass(MDM_GR_USER, SUB_GR_USER_ENTER_ROOM, UserSitDown);
  792. } else {
  793. if (window.LOG_NET_DATA) console.log('PerformEnterRoom window.g_dwRoomID null')
  794. this.IntermitConnect(true);
  795. }
  796. //}
  797. return true;
  798. },
  799. OnUserItemDelete: function (pIClientUserItem) {
  800. //变量定义
  801. var wLastTableID = pIClientUserItem.GetTableID();
  802. var wLastChairID = pIClientUserItem.GetChairID();
  803. var dwLeaveUserID = pIClientUserItem.GetUserID();
  804. var pMeUserInfo = this.mMeUserItem.GetUserInfo();
  805. //离开处理
  806. if ((wLastTableID != INVALID_TABLE) && (wLastChairID != INVALID_CHAIR)) {
  807. //获取用户
  808. var pITableUserItem = this.mTableViewFrame.GetClientUserItem(wLastTableID, wLastChairID);
  809. if (pITableUserItem == pIClientUserItem) this.mTableViewFrame.SetClientUserItem2(wLastTableID, wLastChairID, null);
  810. //离开通知
  811. if ((pIClientUserItem == this.mMeUserItem) || (wLastTableID == pMeUserInfo.wTableID)) {
  812. var UserStatus = new tagUserStatus();
  813. UserStatus.cbUserStatus = US_NULL;
  814. UserStatus.wTableID = INVALID_TABLE;
  815. UserStatus.wChairID = INVALID_CHAIR;
  816. if (gClientKernel.get())
  817. gClientKernel.get().OnGFUserStatus(pIClientUserItem.GetUserID(), UserStatus);
  818. }
  819. }
  820. },
  821. OnUserItemUpdate2: function (pIClientUserItem, tLastScore) {
  822. //变量定义
  823. var pUserInfo = pIClientUserItem.GetUserInfo();
  824. var pMeUserInfo = this.mMeUserItem.GetUserInfo();
  825. var wNowTableID = pIClientUserItem.GetTableID();
  826. var wLastTableID = tLastScore.wTableID;
  827. var wNowChairID = pIClientUserItem.GetChairID();
  828. var wLastChairID = tLastScore.wChairID;
  829. var cbNowStatus = pIClientUserItem.GetUserStatus();
  830. var cbLastStatus = tLastScore.cbUserStatus;
  831. var pClientKernel = gClientKernel.get();
  832. //桌子离开
  833. if ((wLastTableID != INVALID_TABLE) && ((wLastTableID != wNowTableID) || (wLastChairID != wNowChairID))) {
  834. var pITableUserItem = this.mTableViewFrame.GetClientUserItem(wLastTableID, wLastChairID);
  835. if (pITableUserItem == pIClientUserItem) this.mTableViewFrame.SetClientUserItem2(wLastTableID, wLastChairID, null);
  836. }
  837. //桌子加入
  838. if ((wNowTableID != INVALID_TABLE) && (cbNowStatus != US_LOOKON) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  839. this.mTableViewFrame.SetClientUserItem2(wNowTableID, wNowChairID, pIClientUserItem);
  840. }
  841. //桌子状态
  842. if ((this.mTableViewFrame.GetChairCount() < MAX_CHAIR) && (wNowTableID != INVALID_TABLE) && (wNowTableID == wLastTableID) && (wNowChairID == wLastChairID)) {
  843. this.mTableViewFrame.UpdateTableView(wNowTableID);
  844. }
  845. //离开通知
  846. if ((wLastTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  847. //游戏通知
  848. if ((pIClientUserItem == this.mMeUserItem) || (wLastTableID == pMeUserInfo.wTableID)) {
  849. var UserStatus = new tagUserStatus();
  850. UserStatus.wTableID = wNowTableID;
  851. UserStatus.wChairID = wNowChairID;
  852. UserStatus.cbUserStatus = cbNowStatus;
  853. if (pClientKernel) pClientKernel.OnGFUserStatus(pUserInfo.dwUserID, UserStatus);
  854. }
  855. if (pIClientUserItem == this.mMeUserItem) {
  856. //设置变量
  857. mReqTableID = INVALID_TABLE;
  858. mReqChairID = INVALID_CHAIR;
  859. //快速模式的
  860. this.IntermitConnect(true);
  861. //TODO:
  862. //if (this.mIServerItemSink)
  863. // this.mIServerItemSink.OnGFServerClose("");
  864. }
  865. return;
  866. }
  867. //加入处理
  868. if ((wNowTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  869. //自己判断
  870. if (this.mMeUserItem == pIClientUserItem) {
  871. //设置变量
  872. this.mReqTableID = INVALID_TABLE;
  873. this.mReqChairID = INVALID_CHAIR;
  874. if (pClientKernel == 0) {
  875. //启动进程
  876. if (!this.mIServerItemSink || !this.mIServerItemSink.CreateKernel()) {
  877. this.OnGFGameClose(GameExitCode_CreateFailed);
  878. return;
  879. }
  880. } else {
  881. this.mMeUserItem = pIClientUserItem;
  882. //console.log("用户活跃2",this.mMeUserItem)
  883. IServerItem.get().OnGFGameReady();
  884. }
  885. }
  886. //游戏通知
  887. if ((this.mMeUserItem != pIClientUserItem || this.mMeUserItem.GetUserStatus() == US_LOOKON) && pMeUserInfo.wTableID == wNowTableID) {
  888. if (pClientKernel) pClientKernel.OnGFUserEnter(pIClientUserItem);
  889. }
  890. return;
  891. }
  892. //状态改变
  893. if ((wNowTableID != INVALID_TABLE) && (wNowTableID == wLastTableID) && (pMeUserInfo.wTableID == wNowTableID)) {
  894. //游戏通知
  895. UserStatus = new tagUserStatus();
  896. UserStatus.wTableID = wNowTableID;
  897. UserStatus.wChairID = wNowChairID;
  898. UserStatus.cbUserStatus = cbNowStatus;
  899. if (pClientKernel) pClientKernel.OnGFUserStatus(pUserInfo.dwUserID, UserStatus);
  900. }
  901. },
  902. OnUserScoreUpdate: function (pIClientUserItem, UserScore) {
  903. // 获取客户端内核对象
  904. var pClientKernel = gClientKernel.get();
  905. // 如果客户端内核对象存在,则调用其OnGFUserScore方法更新用户分数
  906. if (pClientKernel) pClientKernel.OnGFUserScore(pIClientUserItem.GetUserID(), UserScore);
  907. },
  908. OnUserFlowerUpdate: function (pIClientUserItem, UserFlower) {
  909. // 获取客户端内核对象
  910. var pClientKernel = gClientKernel.get();
  911. // 如果客户端内核对象存在,则调用其OnGFUserFlower方法更新用户鲜花
  912. if (pClientKernel) pClientKernel.OnGFUserFlower(pIClientUserItem.GetUserID(), UserFlower);
  913. },
  914. OnUserItemUpdate: function (pIClientUserItem, LastStatus) {
  915. //变量定义
  916. var pUserInfo = pIClientUserItem.GetUserInfo();
  917. var pMeUserInfo = this.mMeUserItem.GetUserInfo();
  918. var wNowTableID = pIClientUserItem.GetTableID();
  919. var wLastTableID = LastStatus.wTableID;
  920. var wNowChairID = pIClientUserItem.GetChairID();
  921. var wLastChairID = LastStatus.wChairID;
  922. var cbNowStatus = pIClientUserItem.GetUserStatus();
  923. var cbLastStatus = LastStatus.cbUserStatus;
  924. var pClientKernel = gClientKernel.get();
  925. if (this.mIServerItemSink)
  926. this.mIServerItemSink.OnGRUserUpdate(pIClientUserItem);
  927. //桌子离开
  928. if ((wLastTableID != INVALID_TABLE) && ((wLastTableID != wNowTableID) || (wLastChairID != wNowChairID))) {
  929. var pITableUserItem = this.mTableViewFrame.GetClientUserItem(wLastTableID, wLastChairID);
  930. if (pITableUserItem == pIClientUserItem) this.mTableViewFrame.SetClientUserItem2(wLastTableID, wLastChairID, null);
  931. }
  932. //桌子加入
  933. if ((wNowTableID != INVALID_TABLE) && (cbNowStatus != US_LOOKON) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  934. this.mTableViewFrame.SetClientUserItem2(wNowTableID, wNowChairID, pIClientUserItem);
  935. }
  936. //桌子状态
  937. if ((this.mTableViewFrame.GetChairCount() < MAX_CHAIR) && (wNowTableID != INVALID_TABLE) && (wNowTableID == wLastTableID) && (wNowChairID == wLastChairID)) {
  938. this.mTableViewFrame.UpdateTableView(wNowTableID);
  939. }
  940. //离开通知
  941. if ((wLastTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  942. //游戏通知
  943. if ((pIClientUserItem == this.mMeUserItem) || (wLastTableID == pMeUserInfo.wTableID)) {
  944. var UserStatus = new tagUserStatus();
  945. UserStatus.wTableID = wNowTableID;
  946. UserStatus.wChairID = wNowChairID;
  947. UserStatus.cbUserStatus = cbNowStatus;
  948. if (pClientKernel) pClientKernel.OnGFUserStatus(pUserInfo.dwUserID, UserStatus);
  949. }
  950. if (pIClientUserItem == this.mMeUserItem) { //设置变量
  951. this.mReqTableID = INVALID_TABLE;
  952. this.mReqChairID = INVALID_CHAIR;
  953. }
  954. return;
  955. }
  956. //加入处理
  957. if ((wNowTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID))) {
  958. //自己判断
  959. if (this.mMeUserItem == pIClientUserItem) {
  960. //设置变量
  961. this.mReqTableID = INVALID_TABLE;
  962. this.mReqChairID = INVALID_CHAIR;
  963. if (!pClientKernel) {
  964. //启动进程
  965. if (!this.mIServerItemSink || !this.mIServerItemSink.CreateKernel()) {
  966. this.OnGFGameClose(GameExitCode_CreateFailed);
  967. return;
  968. }
  969. } else {
  970. this.mMeUserItem = pIClientUserItem;
  971. // console.log("用户活跃3",this.mMeUserItem)
  972. this.OnGFGameReady();
  973. }
  974. }
  975. //游戏通知
  976. if ((this.mMeUserItem != pIClientUserItem || this.mMeUserItem.GetUserStatus() == US_LOOKON) && (pMeUserInfo.wTableID == wNowTableID)) {
  977. if (pClientKernel) pClientKernel.OnGFUserEnter(pIClientUserItem);
  978. }
  979. return;
  980. }
  981. //状态改变
  982. if ((wNowTableID != INVALID_TABLE) && (wNowTableID == wLastTableID) && (pMeUserInfo.wTableID == wNowTableID)) {
  983. //游戏通知
  984. var UserStatus = new tagUserStatus();
  985. UserStatus.wTableID = wNowTableID;
  986. UserStatus.wChairID = wNowChairID;
  987. UserStatus.cbUserStatus = cbNowStatus;
  988. if (pClientKernel) pClientKernel.OnGFUserStatus(pUserInfo.dwUserID, UserStatus);
  989. return;
  990. }
  991. return;
  992. },
  993. //用户状态
  994. OnSocketSubUserStatus: function (data, dataSize) {
  995. var pUserStatus = new CMD_GR_UserStatus();
  996. //效验参数
  997. if (dataSize < gCByte.Bytes2Str(pUserStatus, data)) return false;
  998. //寻找用户
  999. var pIClientUserItem = this.mUserManager.SearchUserByUserID(pUserStatus.dwUserID);
  1000. //用户判断
  1001. if (pIClientUserItem == 0) return true;
  1002. //设置状态
  1003. if (pUserStatus.UserStatus.cbUserStatus == US_NULL) {
  1004. //删除用户
  1005. this.mUserManager.DeleteUserItem(pIClientUserItem);
  1006. if (this.mMeUserItem == pIClientUserItem) {//xiao
  1007. this.IntermitConnect(true);
  1008. }
  1009. } else {
  1010. //更新用户
  1011. this.mUserManager.UpdateUserItemStatus(pIClientUserItem, pUserStatus.UserStatus);
  1012. }
  1013. return true;
  1014. },
  1015. //发送坐下
  1016. SendSitDownPacket: function (wTableID, wChairID) {
  1017. var UserSitDown = new CMD_GR_UserSitDown();
  1018. //构造数据
  1019. UserSitDown.wTableID = wTableID;
  1020. UserSitDown.wChairID = wChairID;
  1021. UserSitDown.szPassword = "";
  1022. console.log("坐下--SUB_GR_USER_SITDOWN")
  1023. this.SendSocketClass(MDM_GR_USER, SUB_GR_USER_SITDOWN, UserSitDown);
  1024. return true;
  1025. },
  1026. //游戏消息
  1027. //框架消息
  1028. OnSocketMainGameFrame: function (main, sub, data, dataSize) {
  1029. if (!gClientKernel.get() || !this.mIsGameReady) return true;
  1030. return gClientKernel.get().OnGFEventSocket(main, sub, data, dataSize);
  1031. },
  1032. //发送起立
  1033. SendStandUpPacket: function (wTableID, wChairID, cbForceLeave) {
  1034. //变量定义
  1035. var UserStandUp = new CMD_GR_UserStandUp();
  1036. //构造数据
  1037. UserStandUp.wTableID = wTableID;
  1038. UserStandUp.wChairID = wChairID;
  1039. UserStandUp.cbForceLeave = parseInt(cbForceLeave);
  1040. console.log("发送起立==");
  1041. //发送数据
  1042. this.SendSocketClass(MDM_GR_USER, SUB_GR_USER_STANDUP, UserStandUp);
  1043. return true;
  1044. },
  1045. ChangeTable: function () {
  1046. console.log("发送==换桌子");
  1047. this.IntermitConnect(true);
  1048. window.isJoinGame = true;
  1049. return;
  1050. // var UserStandUp = new CMD_GR_UserStandUp();
  1051. // this.SendSocketClass(MDM_GR_USER, SUB_GR_USER_CHAIR_REQ, UserStandUp);
  1052. }
  1053. });