From 80dcd70415678813a3413000234e7bbdd61b8be4 Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Thu, 14 Aug 2025 18:00:11 +0800 Subject: [PATCH] =?UTF-8?q?Http=E7=AE=A1=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/Main/Manager/HttpManager.ts | 109 ++++++++++++++++++ .../Scripts/Main/Manager/HttpManager.ts.meta | 9 ++ assets/Scripts/chat18x/data/LoginData.ts | 34 +++--- 3 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 assets/Scripts/Main/Manager/HttpManager.ts create mode 100644 assets/Scripts/Main/Manager/HttpManager.ts.meta diff --git a/assets/Scripts/Main/Manager/HttpManager.ts b/assets/Scripts/Main/Manager/HttpManager.ts new file mode 100644 index 00000000..e36f1c7c --- /dev/null +++ b/assets/Scripts/Main/Manager/HttpManager.ts @@ -0,0 +1,109 @@ +/** + * Http管理器 + * + */ + +import { sys } from "cc"; +import SubManager from "../../Sub/SubManager"; + +export class HttpManager { + private static _I: HttpManager | null = null; + public static get I(): HttpManager { + if (!HttpManager._I) HttpManager._I = new HttpManager(); + return HttpManager._I; + } + + private constructor() {} + + /** + * 发送请求 + * @param url 接口地址 + * @param data 消息字符串 (json格式) + * @param method 请求方式 + * @param bLock 是否锁定屏幕 + * @param formData 是否formData + * @returns + */ + public async send(url: string, data: any, method: "GET" | "POST" | "PUT" = "GET") { + console.log("[Http] 请求Url:",url, " 方式:", method, " 数据:", data); + var xhr = new XMLHttpRequest(); + xhr.timeout = 10000; + if (method == 'GET') { + url = url + encodeURI(this.jsonToQueryString(data)); + xhr.open(method, url, true); + if (sys.isNative) { + xhr.setRequestHeader("Accept-Encoding", "gzip,deflate"); + xhr.setRequestHeader("content-type", "text/html;charset=utf-8"); + } + } else { + xhr.open(method, url, true); + xhr.setRequestHeader("Content-type", "application/json"); + } + let self = this; + return new Promise((resolve, reason) => { + self.quest(xhr, method, data).then(value => { + resolve(value); + }).catch(err => { + resolve(null); + }); + }); + + } + + /** + * 把对象转 ?a=1&b=2 的查询串 + */ + private jsonToQueryString(json: any) { + var str = ''; + if (typeof json == "object") { + str = "?"; + for (var k in json) { + if (str != "?") { + str += "&"; + } + str += encodeURIComponent(k) + "=" + encodeURIComponent(json[k]); + } + } + return str; + } + + /** + * 统一封装 XHR 的发送与状态回调 + */ + private async quest(xhr: XMLHttpRequest, method: "GET" | "POST" | "PUT" = "GET", data: Object) { + return new Promise((resolve, reason) => { + xhr.onreadystatechange = () => { + if (xhr.readyState == 4) { + if (xhr.status >= 200 && xhr.status < 300) { + console.log("[Http] 返回", xhr.response); + try { + resolve(JSON.parse(xhr.response)); + } catch (e) { + reason(e); + } + } else { + reason(xhr.status) + } + } + }; + xhr.onerror = (error) => { + console.error("http request onerror"); + SubManager.ShowPrompt("网络错误,请检查网络连接"); + reason(error) + }; + xhr.ontimeout = (e) => { + console.error("http request timeout"); + SubManager.ShowPrompt("网络错误,请检查网络连接"); + reason(e) + } + //根据POST和GET方式,选择是否发送msg数据 + if (method == 'POST') { + xhr.send(JSON.stringify(data)); + } else if (method == 'PUT') { + xhr.send(JSON.stringify(data)); + } else { + xhr.send(); + } + }); + } +} \ No newline at end of file diff --git a/assets/Scripts/Main/Manager/HttpManager.ts.meta b/assets/Scripts/Main/Manager/HttpManager.ts.meta new file mode 100644 index 00000000..6e20e92a --- /dev/null +++ b/assets/Scripts/Main/Manager/HttpManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "eb6b309f-5c22-4099-99e2-693408d2a959", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/chat18x/data/LoginData.ts b/assets/Scripts/chat18x/data/LoginData.ts index cdbf926e..cec3e292 100644 --- a/assets/Scripts/chat18x/data/LoginData.ts +++ b/assets/Scripts/chat18x/data/LoginData.ts @@ -4,29 +4,33 @@ import { BaseData } from "./BaseData"; export class LoginData extends BaseData { - private _name: string = ''; - private _score: number = 0; + // 登录状态:0未登录 1登录中 2已登录 + private _loginState = 0; + + /** 设置登录状态 */ + public setLoginState(state: number): void { + this._loginState = state; + } + + /** 获取登录状态 */ + public getLoginState(): number { + return this._loginState; + } + + /**是否已登录成功 */ + public isLogin(): boolean { + return this._loginState === 2; + } public reset(): void { - this._name = ''; - this._score = 0; + } public clear(): void { - this._name = ''; - this._score = 0; + } public destroy(): void { super.destroy(); - // 这里可以做额外释放资源的操作 - } - - public setName(name: string): void { - this._name = name; - } - - public getName(): string { - return this._name; } } \ No newline at end of file