using AxibugEmuOnline.Client.Manager; using AxibugEmuOnline.Client.Network; using System.Collections; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; using static AxibugEmuOnline.Client.HttpAPI; namespace AxibugEmuOnline.Client.ClientCore { public static class App { public static string TokenStr; public static string IP; public static int Port; public static LogManager log; public static NetworkHelper network; public static AppLogin login; public static AppChat chat; public static UserDataManager user; //public static AppNetGame netgame; public static AppEmu emu; public static RomLib nesRomLib; public static HttpAPI httpAPI; public static CacheManager CacheMgr; public static AppSceneLoader SceneLoader; public static AppRoom roomMgr; #region Mono public static TickLoop tickLoop; private static CoroutineRunner coRunner; #endregion public static string PersistentDataPath => Application.persistentDataPath; [RuntimeInitializeOnLoadMethod] static void Init() { log = new LogManager(); LogManager.OnLog += OnNoSugarNetLog; network = new NetworkHelper(); login = new AppLogin(); chat = new AppChat(); user = new UserDataManager(); emu = new AppEmu(); //netgame = new AppNetGame(); httpAPI = new HttpAPI(); nesRomLib = new RomLib(EnumPlatform.NES); CacheMgr = new CacheManager(); SceneLoader = new AppSceneLoader(); roomMgr = new AppRoom(); var go = new GameObject("[AppAxibugEmuOnline]"); GameObject.DontDestroyOnLoad(go); tickLoop = go.AddComponent(); coRunner = go.AddComponent(); StartCoroutine(AppTickFlow()); RePullNetInfo(); } private static IEnumerator AppTickFlow() { while (true) { Tick(); yield return null; } } public static void RePullNetInfo() { StartCoroutine(StartNetInit()); } static IEnumerator StartNetInit() { if (App.network.isConnected) yield break; int platform = 0; UnityWebRequest request = UnityWebRequest.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}"); yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) yield break; App.log.Debug($"ApiResp => {request.downloadHandler.text}"); Resp_CheckStandInfo resp = JsonUtility.FromJson(request.downloadHandler.text); //需要更新 if (resp.needUpdateClient == 1) { //TODO } yield return null; Connect("127.0.0.1", 10492); //Connect(resp.serverIp, resp.serverPort); } private static void Tick() { nesRomLib.ExecuteFetchRomInfo(); } public static Coroutine StartCoroutine(IEnumerator itor) { return coRunner.StartCoroutine(itor); } public static void StopCoroutine(Coroutine cor) { coRunner.StopCoroutine(cor); } public static void Connect(string IP, int port) { Task task = new Task(() => { network.Init(IP, port); }); task.Start(); } public static void Close() { App.log.Info("停止"); } static void OnNoSugarNetLog(int LogLevel, string msg) { Debug.Log("[AxibugEmuOnline]:" + msg); } private static RomFile m_currentGame; public static void BeginGame(RomFile romFile) { if (m_currentGame != null) return; m_currentGame = romFile; switch (romFile.Platform) { case EnumPlatform.NES: SceneLoader.BeginLoad("Scene/Emu_NES", () => { LaunchUI.Instance.HideMainMenu(); var nesEmu = GameObject.FindObjectOfType(); nesEmu.StartGame(romFile); }); break; } } public static void StopGame() { if (m_currentGame == null) return; SceneLoader.BeginLoad("Scene/AxibugEmuOnline.Client", () => { LaunchUI.Instance.ShowMainMenu(); }); } } }