import { find } from "cc"; import { BaseState } from "../../Framework/FSM/BaseState"; import { NetConfig, NetProtocolType } from "../../Framework/Net/NetConfig"; import { NetEvent } from "../../Framework/Net/NetEvent"; import { NetManager } from "../../Framework/Net/NetManager"; import { UIMgr } from "../../Framework/UI/UIMgr"; import { serviceProto } from "../../Shared/protocols/serviceProto"; /** * 应用启动状态 * 职责: * - 初始化游戏引擎 * - 加载基础配置 * - 初始化网络管理器 * - 准备第一个UI界面 */ export class AppStatusBoot extends BaseState { constructor(fsm: any) { super(fsm, "Boot"); } /** * 进入启动状态 */ async onEnter(params?: any): Promise { super.onEnter(params); console.log("[AppStatusBoot] 开始初始化应用..."); try { // 初始化UI console.log("[AppStatusBoot] 初始化UI管理器..."); UIMgr.getInstance().setUIRoot(find("Canvas")!); // 1. 初始化并连接网络 await this.initAndConnectNet(); // 2. 初始化完成,切换到登录状态 console.log("[AppStatusBoot] 启动完成,切换到登录状态"); this._fsm.changeState("Login"); } catch (error) { console.error("[AppStatusBoot] 初始化失败:", error); } } /** * 初始化并连接网络 */ private async initAndConnectNet(): Promise { console.log("[AppStatusBoot] 初始化网络管理器..."); // 1. 获取网络管理器实例 const netManager = NetManager.getInstance(); // 2. 设置服务协议 (必须在 init 之前调用) netManager.setServiceProto(serviceProto); // 3. 监听网络事件 netManager.on(NetEvent.Connected, () => { console.log('✅ 网络已连接'); this.onConnected(); }); netManager.on(NetEvent.Disconnected, () => { console.log('❌ 网络已断开'); }); netManager.on(NetEvent.Reconnecting, (count: number) => { console.log(`🔄 正在重连... (${count})`); }); netManager.on(NetEvent.Error, (error: any) => { console.error('⚠️ 网络错误:', error); }); const config: NetConfig = { serverUrl: 'http://localhost:3000', // TODO: 替换为实际服务器地址 protocolType: NetProtocolType.WebSocket, timeout: 30000, autoReconnect: true, reconnectInterval: 3000, maxReconnectTimes: 5 }; // 5. 初始化 netManager.init(config); // 6. 连接服务器 (HttpClient 创建即可用) const success = await netManager.connect(); if (success) { console.log('[AppStatusBoot]✅ 网络初始化成功'); } else { console.error('[AppStatusBoot]❌ 网络初始化失败'); } } private onConnected() { } /** * 退出启动状态 */ onExit(): void { super.onExit(); console.log("[AppStatusBoot] 离开启动状态"); } }