import { _decorator, Component, EventKeyboard, input, Input, KeyCode, Node, WebView } from 'cc'; import { AppKernel } from '../../app/AppKernel'; import AppConfig from '@scripts/app/AppConfig'; import { ANDROID, IOS } from 'cc/env'; import { getUrlParams } from '@scripts/utils/Helper'; import { WebViewHandler } from './WebViewHandler'; const { ccclass, property } = _decorator; interface IFrameEvent { cmd?: string; [key: string]: string | undefined; } const GAME_FRAME = "http://192.168.1.3:3001"; @ccclass('GameController') export class GameController extends Component { @property(WebView) webView: WebView | null = null; @property(Node) loadingNode: Node | null = null; private _gameWeb: WebViewHandler | null = null; protected start(): void { if (!this.webView) { console.error('[GameController] WebView is not assigned.'); return; } this._gameWeb = new WebViewHandler( this.webView, GAME_FRAME, this as any, AppConfig.GameScheme ) AppKernel.services.gameService.onEntered(); } protected onDestroy(): void { this._gameWeb?.clear(); this._gameWeb = null; AppKernel.services.gameService.onExited(); } onHandleMsg(data: IFrameEvent) { console.log(">>>>>>>>>>>> handleWebEvent: ", data); switch (data.cmd) { case "game_ready": const game_url = AppKernel.stores.mainStore.gameLink; if (!this._gameWeb) { console.warn('[GameController] Ignored game_ready after WebView disposal.'); return; } this._gameWeb.sendMessage({ cmd: "update_gamelink", url: game_url }) break; case "game_exit": this.exitGame(); break; } } async exitGame(): Promise { await AppKernel.services.gameService.exitGame(); } }