import { _decorator, Component, Node } from "cc"; import { ThemeService } from "../network/services/ThemeService"; import { GirlService } from "../network/services/GirlService"; import { ShopService } from "../network/services/ShopService"; import { DataManager, DataId } from "../data/DataManager"; import { ThemeData } from "../data/ThemeData"; import { GirlData } from "../data/GirlData"; import { ShopData } from "../data/ShopData"; import { logger } from "db://assets/Scripts/Main/Common/Logger"; import proto from "db://assets/Scripts/proto/proto.pb.js"; const { ccclass, property } = _decorator; @ccclass("MainController") export class MainController { private static _instance: MainController; public static get I(): MainController { if (!MainController._instance) { MainController._instance = new MainController(); } return MainController._instance; } private constructor() {} // 数据预加载状态标记 private isThemeDataPreloaded: boolean = false; private isDailyRecommendPreloaded: boolean = false; private isRecommendListPreloaded: boolean = false; private isShopListPreloaded: boolean = false; /** * 初始化并预加载数据 */ async init(): Promise { logger.log("[MainController] 开始初始化并预加载数据"); // 并行预加载所有数据 await Promise.all([ this.preloadThemeData(), //this.preloadDailyRecommend(), this.preloadRecommendList(true, 1, 10), this.preloadShopList(), ]); logger.log("[MainController] 数据预加载完成"); } /** * 预加载主题数据 */ async preloadThemeData(): Promise { if (this.isThemeDataPreloaded) { logger.log("[MainController] 主题数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载主题数据"); const reqData = {}; const res = await ThemeService.I.reqHallTheme(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const themeData = DataManager.I.getDataById(DataId.Theme); themeData.themes = res.data; this.isThemeDataPreloaded = true; logger.log("[MainController] 主题数据预加载成功"); return true; } else { logger.warn("[MainController] 主题数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 主题数据预加载异常:", error); return false; } } /** * 预加载每日推荐 */ async preloadDailyRecommend(): Promise { if (this.isDailyRecommendPreloaded) { logger.log("[MainController] 每日推荐数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载每日推荐数据"); const reqData = {}; const res = await GirlService.I.reqDailyRecommend(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setDailyRecommend(res.data); this.isDailyRecommendPreloaded = true; logger.log("[MainController] 每日推荐数据预加载成功"); return true; } else { logger.warn("[MainController] 每日推荐数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 每日推荐数据预加载异常:", error); return false; } } /** * 请求技师推荐列表 * @param isFirstReq 是否首次请求(true 表示首次请求,将覆盖旧数据;false 表示分页加载,追加数据) * @param page 当前页码,从 1 开始 * @param limit 每页数据条数,最少10条 */ async preloadRecommendList(isFirstReq: boolean, page: number, limit: number): Promise { if (this.isRecommendListPreloaded) { logger.log("[MainController] 推荐列表已预加载"); return true; } try { logger.log("[MainController] 开始预加载推荐列表"); const reqData = { page, limit, }; const res = await GirlService.I.reqRecommendList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { const resData = res.data; // 保存数据 const girlData = DataManager.I.getDataById(DataId.Girl); if (isFirstReq) { girlData.setRecommendList(resData); } else { girlData.addRecommendList(resData); } this.isRecommendListPreloaded = true; logger.log("[MainController] 推荐列表预加载成功"); return true; } else { logger.warn("[MainController] 推荐列表预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 推荐列表预加载异常:", error); return false; } } /** * 预加载商品列表 */ async preloadShopList(): Promise { if (this.isShopListPreloaded) { logger.log("[MainController] 商品列表数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载商品列表数据"); const reqData = {}; const res = await ShopService.I.reqShopList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const shopData = DataManager.I.getDataById(DataId.Shop); shopData.goods = res.data; this.isShopListPreloaded = true; logger.log("[MainController] 商品列表数据预加载成功"); return true; } else { logger.warn("[MainController] 商品列表数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 商品列表数据预加载异常:", error); return false; } } /** * 检查数据是否已预加载 */ isDataPreloaded(): boolean { return ( this.isThemeDataPreloaded && this.isDailyRecommendPreloaded && this.isRecommendListPreloaded && this.isShopListPreloaded ); } /** * 获取预加载状态 */ getPreloadStatus() { return { themeData: this.isThemeDataPreloaded, dailyRecommend: this.isDailyRecommendPreloaded, recommendList: this.isRecommendListPreloaded, shopList: this.isShopListPreloaded, allComplete: this.isDataPreloaded(), }; } /** * 重置预加载状态(用于重新加载数据) */ resetPreloadStatus(): void { this.isThemeDataPreloaded = false; this.isDailyRecommendPreloaded = false; this.isRecommendListPreloaded = false; this.isShopListPreloaded = false; logger.log("[MainController] 预加载状态已重置"); } /** * 强制刷新主题数据 */ async refreshThemeData(): Promise { logger.log("[MainController] 开始强制刷新主题数据"); try { const reqData = {}; const res = await ThemeService.I.reqHallTheme(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const themeData = DataManager.I.getDataById(DataId.Theme); themeData.themes = res.data; this.isThemeDataPreloaded = true; logger.log("[MainController] 主题数据刷新成功"); return true; } else { logger.warn("[MainController] 主题数据刷新失败:", res); return false; } } catch (error) { logger.error("[MainController] 主题数据刷新异常:", error); return false; } } /** * 强制刷新每日推荐数据 */ async refreshDailyRecommend(): Promise { logger.log("[MainController] 开始强制刷新每日推荐数据"); try { const reqData = {}; const res = await GirlService.I.reqDailyRecommend(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setDailyRecommend(res.data); this.isDailyRecommendPreloaded = true; logger.log("[MainController] 每日推荐数据刷新成功"); return true; } else { logger.warn("[MainController] 每日推荐数据刷新失败:", res); return false; } } catch (error) { logger.error("[MainController] 每日推荐数据刷新异常:", error); return false; } } /** * 强制刷新推荐列表数据 */ async refreshRecommendList(): Promise { logger.log("[MainController] 开始强制刷新推荐列表数据"); try { const reqData = { page: 1, limit: 10, }; const res = await GirlService.I.reqRecommendList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setRecommendList(res.data); this.isRecommendListPreloaded = true; logger.log("[MainController] 推荐列表数据刷新成功"); return true; } else { logger.warn("[MainController] 推荐列表数据刷新失败:", res); return false; } } catch (error) { logger.error("[MainController] 推荐列表数据刷新异常:", error); return false; } } }