123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import { director } from "cc";
- import { SceneDef } from "../../scripts/SceneDef";
- import { HttpLobbyServer, NetLobbyServer, lobbyNet, loginNet } from "./NetGameServer";
- import { GameSceneUtil } from "./GameSceneUtil";
- import { UserLocalCache } from "./UserLocalCache";
- import { UserMgr } from "./UserMgr";
- import { NetUtil } from "./NetUtil";
- export class LobbyMgr {
- private static _inst: LobbyMgr;
- public static get inst(): LobbyMgr {
- if (!this._inst) {
- this._inst = new LobbyMgr();
- }
- return this._inst;
- }
- constructor() {
- tgx.AudioMgr.inst.musicVolume = UserLocalCache.inst.musicVolume;
- tgx.AudioMgr.inst.soundVolume = UserLocalCache.inst.soundVolume;
- if (lobbyNet.type == 'http') {
- (lobbyNet as HttpLobbyServer).addErrorFilter('INVALID_TOKEN', () => {
- // tgx.UIAlert.show('TOKEN 过期,请重新登录').onClick(() => {
- // tgx.SceneUtil.loadScene(SceneDef.LOGIN);
- // });
- });
- (lobbyNet as HttpLobbyServer).addErrorFilter('UNKNOWN_ERROR', () => {
- // tgx.UIAlert.show('系统错误,请重新登录').onClick(() => {
- // tgx.SceneUtil.loadScene(SceneDef.LOGIN);
- // });
- });
- }
- }
- async doLogin(account: string, password: string) {
- let serverList = await NetUtil.getGameServerList();
- loginNet.createConnection(serverList);
- let ret = await loginNet.callApi('login/Login', { account: account, password: password });
- if (ret.isSucc) {
- lobbyNet.authParams = ret.res;
- let authRet = await this.doAuth();
- if (!authRet.isSucc) {
- return authRet;
- }
- }
- else {
- if (ret.err.message == 'USER_NOT_EXISTS' || ret.err.message == 'PASSWORD_WRONG') {
- tgx.UIAlert.show('用户名或者密码错误!');
- }
- else {
- tgx.UIAlert.show(ret.err.message);
- }
- }
- return ret;
- }
- public async backToLobby() {
- let ret = await this.doAuth();
- if (!ret.isSucc) {
- }
- }
- async doAuth() {
- if (!lobbyNet.authParams) {
- return { isSucc: false };
- }
- lobbyNet.createConnection([lobbyNet.authParams.lobbyUrl]);
- if (lobbyNet.type != 'http') {
- let net = lobbyNet as NetLobbyServer;
- let ret2 = await net.ensureConnected();
- if (!ret2.isSucc) {
- tgx.UIAlert.show(ret2.err.message);
- return ret2;
- }
- }
- let ret = await lobbyNet.callApi('lobby/Auth', lobbyNet.authParams);
- if (!ret.isSucc) {
- tgx.UIAlert.show(ret.err.message);
- return ret;
- }
- UserMgr.inst.setUserInfo(ret.res.userInfo);
- //没有名字,表示还未创建角色,则进入角色创建流程
- if (!UserMgr.inst.name) {
- tgx.UIWaiting.show('角色准备中');
- await tgx.SceneUtil.loadScene(SceneDef.CREATE_ROLE);
- }
- //如果角色在房间中,则进入房间
- else if (ret.res.roomId) {
- let ret2 = await this.doTryEnterRoom(ret.res.roomId);
- if (!ret2.isSucc) {
- //进入大厅
- await tgx.SceneUtil.loadScene(SceneDef.LOBBY);
- }
- }
- else {
- //进入大厅
- await tgx.SceneUtil.loadScene(SceneDef.LOBBY);
- }
- return { isSucc: true };
- }
- async rpc_CreateRole(name: string, visualId: number) {
- let ret = await lobbyNet.callApi('lobby/CreateRole', { name: name, visualId: visualId });
- if (ret.isSucc) {
- UserMgr.inst.setUserInfo({ name: ret.res.name, visualId: ret.res.visualId } as any);
- }
- return ret;
- }
- async doTryEnterRoom(id: string, password?: string) {
- tgx.UIWaiting.show('进入世界');
- let ret = await lobbyNet.callApi('lobby/TryEnterRoom', { id: id, password: password }, { timeout: 10000 });
- tgx.UIWaiting.hide();
- if (ret.isSucc) {
- let params = ret.res;
- tgx.UIWaiting.show('进入世界');
- return await GameSceneUtil.inst.enterGame(params);
- }
- else {
- tgx.UIAlert.show(ret.err.message);
- }
- return ret;
- }
- async rpc_QuickPlay(type: string, immediate?: boolean) {
- let ret = await lobbyNet.callApi("lobby/StartMatch", { type: type, immediate: immediate });
- return ret;
- }
- async rpc_QuickPlayCancel() {
- let ret = await lobbyNet.callApi("lobby/CancelMatch", {});
- return ret;
- }
- async rpc_CreateRoom(type: string, name: string, password: string) {
- let ret = await lobbyNet.callApi("lobby/CreateRoom", { roomName: name, gameType: type, password: password });
- return ret;
- }
- async rpc_GetAnnouncement(type: string) {
- let ret = await lobbyNet.callApi("lobby/GetAnnouncement", { type: type });
- return ret;
- }
- async rpc_GetNotice() {
- let ret = await lobbyNet.callApi("lobby/GetNotice", {});
- return ret;
- }
- }
|