GameController.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { _decorator, Component, EventKeyboard, input, Input, KeyCode, Node, WebView } from 'cc';
  2. import { AppKernel } from '../../app/AppKernel';
  3. import AppConfig from '@scripts/app/AppConfig';
  4. import { ANDROID, IOS } from 'cc/env';
  5. import { getUrlParams } from '@scripts/utils/Helper';
  6. import { WebViewHandler } from './WebViewHandler';
  7. const { ccclass, property } = _decorator;
  8. interface IFrameEvent {
  9. cmd?: string;
  10. [key: string]: string | undefined;
  11. }
  12. const GAME_FRAME = "http://192.168.1.3:3001";
  13. @ccclass('GameController')
  14. export class GameController extends Component {
  15. @property(WebView)
  16. webView: WebView | null = null;
  17. @property(Node)
  18. loadingNode: Node | null = null;
  19. private _gameWeb: WebViewHandler | null = null;
  20. protected start(): void {
  21. if (!this.webView) {
  22. console.error('[GameController] WebView is not assigned.');
  23. return;
  24. }
  25. this._gameWeb = new WebViewHandler(
  26. this.webView,
  27. GAME_FRAME,
  28. this as any,
  29. AppConfig.GameScheme
  30. )
  31. AppKernel.services.gameService.onEntered();
  32. }
  33. protected onDestroy(): void {
  34. this._gameWeb?.clear();
  35. this._gameWeb = null;
  36. AppKernel.services.gameService.onExited();
  37. }
  38. onHandleMsg(data: IFrameEvent) {
  39. console.log(">>>>>>>>>>>> handleWebEvent: ", data);
  40. switch (data.cmd) {
  41. case "game_ready":
  42. const game_url = AppKernel.stores.gameStore.gameLink;
  43. if (!this._gameWeb) {
  44. console.warn('[GameController] Ignored game_ready after WebView disposal.');
  45. return;
  46. }
  47. this._gameWeb.sendMessage({ cmd: "update_gamelink", url: game_url })
  48. break;
  49. case "game_exit":
  50. this.exitGame();
  51. break;
  52. }
  53. }
  54. async exitGame(): Promise<void> {
  55. await AppKernel.services.gameService.exitGame();
  56. }
  57. }