2025-09-12 18:20:41 +08:00
|
|
|
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";
|
2025-09-21 20:25:36 +08:00
|
|
|
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
|
|
|
|
|
2025-09-12 18:20:41 +08:00
|
|
|
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 isShopListPreloaded: boolean = false;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 初始化并预加载数据
|
|
|
|
|
*/
|
|
|
|
|
async init(): Promise<void> {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始初始化并预加载数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
|
|
|
|
|
// 并行预加载所有数据
|
|
|
|
|
await Promise.all([
|
|
|
|
|
this.preloadThemeData(),
|
|
|
|
|
this.preloadDailyRecommend(),
|
|
|
|
|
this.preloadShopList()
|
|
|
|
|
]);
|
|
|
|
|
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 数据预加载完成");
|
2025-09-12 18:20:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 预加载主题数据
|
|
|
|
|
*/
|
|
|
|
|
async preloadThemeData(): Promise<boolean> {
|
|
|
|
|
if (this.isThemeDataPreloaded) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 主题数据已预加载");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始预加载主题数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
const reqData = {};
|
|
|
|
|
const res = await ThemeService.I.reqHallTheme(reqData);
|
|
|
|
|
|
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
|
|
|
// 保存数据到DataManager
|
|
|
|
|
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
|
|
|
|
themeData.themes = res.data;
|
|
|
|
|
this.isThemeDataPreloaded = true;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 主题数据预加载成功");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
} else {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.warn("[MainController] 主题数据预加载失败:", res);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.error("[MainController] 主题数据预加载异常:", error);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 预加载每日推荐
|
|
|
|
|
*/
|
|
|
|
|
async preloadDailyRecommend(): Promise<boolean> {
|
|
|
|
|
if (this.isDailyRecommendPreloaded) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 每日推荐数据已预加载");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始预加载每日推荐数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
const reqData = {};
|
|
|
|
|
const res = await GirlService.I.reqDailyRecommend(reqData);
|
|
|
|
|
|
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
|
|
|
// 保存数据到DataManager
|
|
|
|
|
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
|
|
|
|
girlData.setDailyRecommend(res.data);
|
|
|
|
|
this.isDailyRecommendPreloaded = true;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 每日推荐数据预加载成功");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
} else {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.warn("[MainController] 每日推荐数据预加载失败:", res);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.error("[MainController] 每日推荐数据预加载异常:", error);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 预加载商品列表
|
|
|
|
|
*/
|
|
|
|
|
async preloadShopList(): Promise<boolean> {
|
|
|
|
|
if (this.isShopListPreloaded) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 商品列表数据已预加载");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始预加载商品列表数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
const reqData = {};
|
|
|
|
|
const res = await ShopService.I.reqShopList(reqData);
|
|
|
|
|
|
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
|
|
|
// 保存数据到DataManager
|
|
|
|
|
const shopData = DataManager.I.getDataById<ShopData>(DataId.Shop);
|
|
|
|
|
shopData.goods = res.data;
|
|
|
|
|
this.isShopListPreloaded = true;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 商品列表数据预加载成功");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
} else {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.warn("[MainController] 商品列表数据预加载失败:", res);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.error("[MainController] 商品列表数据预加载异常:", error);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检查数据是否已预加载
|
|
|
|
|
*/
|
|
|
|
|
isDataPreloaded(): boolean {
|
|
|
|
|
return this.isThemeDataPreloaded && this.isDailyRecommendPreloaded && this.isShopListPreloaded;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取预加载状态
|
|
|
|
|
*/
|
|
|
|
|
getPreloadStatus() {
|
|
|
|
|
return {
|
|
|
|
|
themeData: this.isThemeDataPreloaded,
|
|
|
|
|
dailyRecommend: this.isDailyRecommendPreloaded,
|
|
|
|
|
shopList: this.isShopListPreloaded,
|
|
|
|
|
allComplete: this.isDataPreloaded()
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重置预加载状态(用于重新加载数据)
|
|
|
|
|
*/
|
|
|
|
|
resetPreloadStatus(): void {
|
|
|
|
|
this.isThemeDataPreloaded = false;
|
|
|
|
|
this.isDailyRecommendPreloaded = false;
|
|
|
|
|
this.isShopListPreloaded = false;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 预加载状态已重置");
|
2025-09-12 18:20:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 强制刷新主题数据
|
|
|
|
|
*/
|
|
|
|
|
async refreshThemeData(): Promise<boolean> {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始强制刷新主题数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
try {
|
|
|
|
|
const reqData = {};
|
|
|
|
|
const res = await ThemeService.I.reqHallTheme(reqData);
|
|
|
|
|
|
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
|
|
|
// 保存数据到DataManager
|
|
|
|
|
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
|
|
|
|
themeData.themes = res.data;
|
|
|
|
|
this.isThemeDataPreloaded = true;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 主题数据刷新成功");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
} else {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.warn("[MainController] 主题数据刷新失败:", res);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.error("[MainController] 主题数据刷新异常:", error);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 强制刷新每日推荐数据
|
|
|
|
|
*/
|
|
|
|
|
async refreshDailyRecommend(): Promise<boolean> {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 开始强制刷新每日推荐数据");
|
2025-09-12 18:20:41 +08:00
|
|
|
try {
|
|
|
|
|
const reqData = {};
|
|
|
|
|
const res = await GirlService.I.reqDailyRecommend(reqData);
|
|
|
|
|
|
|
|
|
|
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
|
|
|
|
// 保存数据到DataManager
|
|
|
|
|
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
|
|
|
|
girlData.setDailyRecommend(res.data);
|
|
|
|
|
this.isDailyRecommendPreloaded = true;
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.log("[MainController] 每日推荐数据刷新成功");
|
2025-09-12 18:20:41 +08:00
|
|
|
return true;
|
|
|
|
|
} else {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.warn("[MainController] 每日推荐数据刷新失败:", res);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
2025-09-21 20:25:36 +08:00
|
|
|
logger.error("[MainController] 每日推荐数据刷新异常:", error);
|
2025-09-12 18:20:41 +08:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|