Files
18xchat/assets/Scripts/chat18x/core/MainController.ts
T

362 lines
11 KiB
TypeScript
Raw Normal View History

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";
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;
2025-10-11 10:52:16 +08:00
private isRecommendListPreloaded: boolean = false;
private isShopListPreloaded: boolean = false;
2025-10-27 17:33:09 +08:00
private isBookmarkListPreloaded: boolean = false;
/**
* 初始化并预加载数据
*/
async init(): Promise<void> {
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 开始初始化并预加载数据");
// 并行预加载所有数据
await Promise.all([
this.preloadThemeData(),
2025-10-11 16:19:57 +08:00
//this.preloadDailyRecommend(),
2025-10-11 10:52:16 +08:00
this.preloadRecommendList(true, 1, 10),
this.preloadShopList(),
2025-10-27 17:33:09 +08:00
this.preloadBookmarkList(),
]);
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 数据预加载完成");
}
/**
* 预加载主题数据
*/
async preloadThemeData(): Promise<boolean> {
if (this.isThemeDataPreloaded) {
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 主题数据已预加载");
return true;
}
try {
2025-09-21 20:25:36 +08:00
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<ThemeData>(DataId.Theme);
themeData.themes = res.data;
this.isThemeDataPreloaded = true;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 主题数据预加载成功");
return true;
} else {
2025-09-21 20:25:36 +08:00
logger.warn("[MainController] 主题数据预加载失败:", res);
return false;
}
} catch (error) {
2025-09-21 20:25:36 +08:00
logger.error("[MainController] 主题数据预加载异常:", error);
return false;
}
}
/**
* 预加载每日推荐
*/
async preloadDailyRecommend(): Promise<boolean> {
if (this.isDailyRecommendPreloaded) {
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 每日推荐数据已预加载");
return true;
}
try {
2025-09-21 20:25:36 +08:00
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<GirlData>(DataId.Girl);
girlData.setDailyRecommend(res.data);
this.isDailyRecommendPreloaded = true;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 每日推荐数据预加载成功");
return true;
} else {
2025-09-21 20:25:36 +08:00
logger.warn("[MainController] 每日推荐数据预加载失败:", res);
return false;
}
} catch (error) {
2025-09-21 20:25:36 +08:00
logger.error("[MainController] 每日推荐数据预加载异常:", error);
return false;
}
}
2025-10-11 10:52:16 +08:00
/**
* 请求技师推荐列表
* @param isFirstReq 是否首次请求(true 表示首次请求,将覆盖旧数据;false 表示分页加载,追加数据)
* @param page 当前页码,从 1 开始
* @param limit 每页数据条数,最少10条
*/
async preloadRecommendList(isFirstReq: boolean, page: number, limit: number): Promise<boolean> {
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<GirlData>(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<boolean> {
if (this.isShopListPreloaded) {
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 商品列表数据已预加载");
return true;
}
try {
2025-09-21 20:25:36 +08:00
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<ShopData>(DataId.Shop);
shopData.goods = res.data;
this.isShopListPreloaded = true;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 商品列表数据预加载成功");
return true;
} else {
2025-09-21 20:25:36 +08:00
logger.warn("[MainController] 商品列表数据预加载失败:", res);
return false;
}
} catch (error) {
2025-09-21 20:25:36 +08:00
logger.error("[MainController] 商品列表数据预加载异常:", error);
return false;
}
}
2025-10-27 17:33:09 +08:00
/**
* 预加载收藏列表
*/
async preloadBookmarkList(): Promise<boolean> {
if (this.isBookmarkListPreloaded) {
logger.log("[MainController] 收藏列表数据已预加载");
return true;
}
try {
logger.log("[MainController] 开始预加载收藏列表数据");
const reqData = {};
const res = await GirlService.I.reqBookmarkGirlList(reqData);
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
// 保存数据到DataManager
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
girlData.setBookmarkGirlList(res.data);
this.isBookmarkListPreloaded = 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 &&
2025-10-11 10:52:16 +08:00
this.isRecommendListPreloaded &&
2025-10-27 17:33:09 +08:00
this.isShopListPreloaded &&
this.isBookmarkListPreloaded
);
}
/**
* 获取预加载状态
*/
getPreloadStatus() {
return {
themeData: this.isThemeDataPreloaded,
dailyRecommend: this.isDailyRecommendPreloaded,
2025-10-11 10:52:16 +08:00
recommendList: this.isRecommendListPreloaded,
shopList: this.isShopListPreloaded,
2025-10-27 17:33:09 +08:00
bookmarkList: this.isBookmarkListPreloaded,
allComplete: this.isDataPreloaded(),
};
}
/**
* 重置预加载状态(用于重新加载数据)
*/
resetPreloadStatus(): void {
this.isThemeDataPreloaded = false;
this.isDailyRecommendPreloaded = false;
2025-10-11 10:52:16 +08:00
this.isRecommendListPreloaded = false;
this.isShopListPreloaded = false;
2025-10-27 17:33:09 +08:00
this.isBookmarkListPreloaded = false;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 预加载状态已重置");
}
/**
* 强制刷新主题数据
*/
async refreshThemeData(): Promise<boolean> {
2025-09-21 20:25:36 +08:00
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<ThemeData>(DataId.Theme);
themeData.themes = res.data;
this.isThemeDataPreloaded = true;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 主题数据刷新成功");
return true;
} else {
2025-09-21 20:25:36 +08:00
logger.warn("[MainController] 主题数据刷新失败:", res);
return false;
}
} catch (error) {
2025-09-21 20:25:36 +08:00
logger.error("[MainController] 主题数据刷新异常:", error);
return false;
}
}
/**
* 强制刷新每日推荐数据
*/
async refreshDailyRecommend(): Promise<boolean> {
2025-09-21 20:25:36 +08:00
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<GirlData>(DataId.Girl);
girlData.setDailyRecommend(res.data);
this.isDailyRecommendPreloaded = true;
2025-09-21 20:25:36 +08:00
logger.log("[MainController] 每日推荐数据刷新成功");
return true;
} else {
2025-09-21 20:25:36 +08:00
logger.warn("[MainController] 每日推荐数据刷新失败:", res);
return false;
}
} catch (error) {
2025-09-21 20:25:36 +08:00
logger.error("[MainController] 每日推荐数据刷新异常:", error);
return false;
}
}
2025-10-11 16:19:57 +08:00
/**
* 强制刷新推荐列表数据
*/
async refreshRecommendList(): Promise<boolean> {
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<GirlData>(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;
}
}
2025-10-27 17:33:09 +08:00
/**
* 强制刷新收藏列表数据
*/
async refreshBookmarkList(): Promise<boolean> {
logger.log("[MainController] 开始强制刷新收藏列表数据");
try {
const reqData = {};
const res = await GirlService.I.reqBookmarkGirlList(reqData);
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
// 保存数据到DataManager
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
girlData.setBookmarkGirlList(res.data);
this.isBookmarkListPreloaded = true;
logger.log("[MainController] 收藏列表数据刷新成功");
return true;
} else {
logger.warn("[MainController] 收藏列表数据刷新失败:", res);
return false;
}
} catch (error) {
logger.error("[MainController] 收藏列表数据刷新异常:", error);
return false;
}
}
}