forked from sin365/AxibugEmuOnline
169 lines
5.0 KiB
C#
169 lines
5.0 KiB
C#
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<TickLoop>();
|
|
coRunner = go.AddComponent<CoroutineRunner>();
|
|
|
|
var importNode = GameObject.Find("IMPORTENT");
|
|
GameObject.DontDestroyOnLoad(importNode);
|
|
|
|
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<Resp_CheckStandInfo>(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<NesEmulator>();
|
|
nesEmu.StartGame(romFile);
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
|
|
public static void StopGame()
|
|
{
|
|
if (m_currentGame == null) return;
|
|
|
|
SceneLoader.BeginLoad("Scene/AxibugEmuOnline.Client", () =>
|
|
{
|
|
LaunchUI.Instance.ShowMainMenu();
|
|
});
|
|
}
|
|
}
|
|
} |