using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using GameFramework.Event; using UnityEngine; using UnityEngine.UI; using UnityGameFramework.Runtime; using Vuplex.WebView; using Vuplex.WebView.Demos; using ZenFulcrum.EmbeddedBrowser; public class ExamStudyForm : UIFormLogic { public CanvasWebViewPrefab browserUI; public HardwareKeyboardListener _hardwareKeyboardListener { get; private set; } protected override void OnInit(object userData) { base.OnInit(userData); StartCoroutine(InItUiComponent()); } protected override void OnOpen(object userData) { base.OnOpen(userData); GameMain.Event.Subscribe(OnBeginExamEvent.EventId, OnBeginExam); _setUpHardwareKeyboard(); } private void OnBeginExam(object sender, GameEventArgs e) { OnBeginExamEvent onBeginExamEvent = (OnBeginExamEvent)e; string token = onBeginExamEvent.token; long timestamp = System.DateTime.Now.Ticks / 10000000; if (browserUI != null && browserUI.WebView.IsInitialized) { browserUI.WebView.LoadUrl(string.Format("{0}{1}&v={2}#/", HttpAddress.examAddress, UserData.token, timestamp)); } } protected override void OnClose(bool isShutdown, object userData) { base.OnClose(isShutdown, userData); GameMain.Event.Unsubscribe(OnBeginExamEvent.EventId, OnBeginExam); _hardwareKeyboardListener = null; } IEnumerator InItUiComponent() { //browserUI = this.transform.Find("CanvasWebViewPrefab").GetComponent(); // Wait for the CanvasWebViewPrefab to initialize, because the CanvasWebViewPrefab.WebView property // is null until the prefab has initialized. yield return new WaitUntil(()=> { return browserUI.WebView != null; }); long timestamp = System.DateTime.Now.Ticks / 10000000; browserUI.WebView.LoadUrl(string.Format("{0}{1}&v={2}#/",HttpAddress.examAddress,UserData.token, timestamp)); } void _setUpHardwareKeyboard() { // Send keys from the hardware (USB or Bluetooth) keyboard to the webview. // Use separate KeyDown() and KeyUp() methods if the webview supports // it, otherwise just use IWebView.SendKey(). // https://developer.vuplex.com/webview/IWithKeyDownAndUp _hardwareKeyboardListener = HardwareKeyboardListener.Instantiate(); _hardwareKeyboardListener.KeyDownReceived += (sender, eventArgs) => { var webViewWithKeyDown = browserUI.WebView as IWithKeyDownAndUp; if (webViewWithKeyDown != null) { webViewWithKeyDown.KeyDown(eventArgs.Value, eventArgs.Modifiers); } else { browserUI.WebView.SendKey(eventArgs.Value); } }; _hardwareKeyboardListener.KeyUpReceived += (sender, eventArgs) => { var webViewWithKeyUp = browserUI.WebView as IWithKeyDownAndUp; webViewWithKeyUp?.KeyUp(eventArgs.Value, eventArgs.Modifiers); }; } }