LobbyMgr.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import { director } from "cc";
  2. import { SceneDef } from "../../scripts/SceneDef";
  3. import { HttpLobbyServer, NetLobbyServer, lobbyNet, loginNet } from "./NetGameServer";
  4. import { GameSceneUtil } from "./GameSceneUtil";
  5. import { UserLocalCache } from "./UserLocalCache";
  6. import { UserMgr } from "./UserMgr";
  7. import { NetUtil } from "./NetUtil";
  8. export class LobbyMgr {
  9. private static _inst: LobbyMgr;
  10. public static get inst(): LobbyMgr {
  11. if (!this._inst) {
  12. this._inst = new LobbyMgr();
  13. }
  14. return this._inst;
  15. }
  16. constructor() {
  17. tgx.AudioMgr.inst.musicVolume = UserLocalCache.inst.musicVolume;
  18. tgx.AudioMgr.inst.soundVolume = UserLocalCache.inst.soundVolume;
  19. if (lobbyNet.type == 'http') {
  20. (lobbyNet as HttpLobbyServer).addErrorFilter('INVALID_TOKEN', () => {
  21. // tgx.UIAlert.show('TOKEN 过期,请重新登录').onClick(() => {
  22. // tgx.SceneUtil.loadScene(SceneDef.LOGIN);
  23. // });
  24. });
  25. (lobbyNet as HttpLobbyServer).addErrorFilter('UNKNOWN_ERROR', () => {
  26. // tgx.UIAlert.show('系统错误,请重新登录').onClick(() => {
  27. // tgx.SceneUtil.loadScene(SceneDef.LOGIN);
  28. // });
  29. });
  30. }
  31. }
  32. async doLogin(account: string, password: string) {
  33. let serverList = await NetUtil.getGameServerList();
  34. loginNet.createConnection(serverList);
  35. let ret = await loginNet.callApi('login/Login', { account: account, password: password });
  36. if (ret.isSucc) {
  37. lobbyNet.authParams = ret.res;
  38. let authRet = await this.doAuth();
  39. if (!authRet.isSucc) {
  40. return authRet;
  41. }
  42. }
  43. else {
  44. if (ret.err.message == 'USER_NOT_EXISTS' || ret.err.message == 'PASSWORD_WRONG') {
  45. tgx.UIAlert.show('用户名或者密码错误!');
  46. }
  47. else {
  48. tgx.UIAlert.show(ret.err.message);
  49. }
  50. }
  51. return ret;
  52. }
  53. public async backToLobby() {
  54. let ret = await this.doAuth();
  55. if (!ret.isSucc) {
  56. }
  57. }
  58. async doAuth() {
  59. if (!lobbyNet.authParams) {
  60. return { isSucc: false };
  61. }
  62. lobbyNet.createConnection([lobbyNet.authParams.lobbyUrl]);
  63. if (lobbyNet.type != 'http') {
  64. let net = lobbyNet as NetLobbyServer;
  65. let ret2 = await net.ensureConnected();
  66. if (!ret2.isSucc) {
  67. tgx.UIAlert.show(ret2.err.message);
  68. return ret2;
  69. }
  70. }
  71. let ret = await lobbyNet.callApi('lobby/Auth', lobbyNet.authParams);
  72. if (!ret.isSucc) {
  73. tgx.UIAlert.show(ret.err.message);
  74. return ret;
  75. }
  76. UserMgr.inst.setUserInfo(ret.res.userInfo);
  77. //没有名字,表示还未创建角色,则进入角色创建流程
  78. if (!UserMgr.inst.name) {
  79. tgx.UIWaiting.show('角色准备中');
  80. await tgx.SceneUtil.loadScene(SceneDef.CREATE_ROLE);
  81. }
  82. //如果角色在房间中,则进入房间
  83. else if (ret.res.roomId) {
  84. let ret2 = await this.doTryEnterRoom(ret.res.roomId);
  85. if (!ret2.isSucc) {
  86. //进入大厅
  87. await tgx.SceneUtil.loadScene(SceneDef.LOBBY);
  88. }
  89. }
  90. else {
  91. //进入大厅
  92. await tgx.SceneUtil.loadScene(SceneDef.LOBBY);
  93. }
  94. return { isSucc: true };
  95. }
  96. async rpc_CreateRole(name: string, visualId: number) {
  97. let ret = await lobbyNet.callApi('lobby/CreateRole', { name: name, visualId: visualId });
  98. if (ret.isSucc) {
  99. UserMgr.inst.setUserInfo({ name: ret.res.name, visualId: ret.res.visualId } as any);
  100. }
  101. return ret;
  102. }
  103. async doTryEnterRoom(id: string, password?: string) {
  104. tgx.UIWaiting.show('进入世界');
  105. let ret = await lobbyNet.callApi('lobby/TryEnterRoom', { id: id, password: password }, { timeout: 10000 });
  106. tgx.UIWaiting.hide();
  107. if (ret.isSucc) {
  108. let params = ret.res;
  109. tgx.UIWaiting.show('进入世界');
  110. return await GameSceneUtil.inst.enterGame(params);
  111. }
  112. else {
  113. tgx.UIAlert.show(ret.err.message);
  114. }
  115. return ret;
  116. }
  117. async rpc_QuickPlay(type: string, immediate?: boolean) {
  118. let ret = await lobbyNet.callApi("lobby/StartMatch", { type: type, immediate: immediate });
  119. return ret;
  120. }
  121. async rpc_QuickPlayCancel() {
  122. let ret = await lobbyNet.callApi("lobby/CancelMatch", {});
  123. return ret;
  124. }
  125. async rpc_CreateRoom(type: string, name: string, password: string) {
  126. let ret = await lobbyNet.callApi("lobby/CreateRoom", { roomName: name, gameType: type, password: password });
  127. return ret;
  128. }
  129. async rpc_GetAnnouncement(type: string) {
  130. let ret = await lobbyNet.callApi("lobby/GetAnnouncement", { type: type });
  131. return ret;
  132. }
  133. async rpc_GetNotice() {
  134. let ret = await lobbyNet.callApi("lobby/GetNotice", {});
  135. return ret;
  136. }
  137. }