forked from sin365/AxibugEmuOnline
Rom下载系统
This commit is contained in:
parent
209c31fd72
commit
fe6c427603
@ -1,6 +1,7 @@
|
|||||||
using AxibugEmuOnline.Client.Manager;
|
using AxibugEmuOnline.Client.Manager;
|
||||||
using AxibugEmuOnline.Client.Network;
|
using AxibugEmuOnline.Client.Network;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using static AxibugEmuOnline.Client.Manager.LogManager;
|
using static AxibugEmuOnline.Client.Manager.LogManager;
|
||||||
|
|
||||||
@ -19,8 +20,13 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
public static UserDataManager user;
|
public static UserDataManager user;
|
||||||
public static AppNetGame netgame;
|
public static AppNetGame netgame;
|
||||||
public static AppEmu emu;
|
public static AppEmu emu;
|
||||||
|
public static RomLib romLib;
|
||||||
|
public static HttpAPI httpAPI;
|
||||||
|
|
||||||
public static void Init()
|
private static CoroutineRunner coRunner;
|
||||||
|
|
||||||
|
[RuntimeInitializeOnLoadMethod]
|
||||||
|
static void Init()
|
||||||
{
|
{
|
||||||
log = new LogManager();
|
log = new LogManager();
|
||||||
LogManager.OnLog += OnNoSugarNetLog;
|
LogManager.OnLog += OnNoSugarNetLog;
|
||||||
@ -30,6 +36,20 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
user = new UserDataManager();
|
user = new UserDataManager();
|
||||||
emu = new AppEmu();
|
emu = new AppEmu();
|
||||||
netgame = new AppNetGame();
|
netgame = new AppNetGame();
|
||||||
|
|
||||||
|
var go = new GameObject("[AppAxibugEmuOnline]");
|
||||||
|
GameObject.DontDestroyOnLoad(go);
|
||||||
|
coRunner = go.AddComponent<CoroutineRunner>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Coroutine StartCoroutine(IEnumerator itor)
|
||||||
|
{
|
||||||
|
return coRunner.StartCoroutine(itor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void StopCoroutine(Coroutine cor)
|
||||||
|
{
|
||||||
|
coRunner.StopCoroutine(cor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Connect(string IP, int port)
|
public static bool Connect(string IP, int port)
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client
|
||||||
|
{
|
||||||
|
public class CoroutineRunner : MonoBehaviour
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 26e0101eb56737b4f97fcaa3bd319d43
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
51
AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs
Normal file
51
AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client
|
||||||
|
{
|
||||||
|
public class HttpAPI
|
||||||
|
{
|
||||||
|
public string WebSite = "http://emu.axibug.com/api";
|
||||||
|
|
||||||
|
public void GetNesRomList(Action<Resp_GameList> callback, int page, int pageSize = 10)
|
||||||
|
{
|
||||||
|
AppAxibugEmuOnline.StartCoroutine(GetNesRomListFlow(page, pageSize, callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerator GetNesRomListFlow(int page, int pageSize, Action<Resp_GameList> callback)
|
||||||
|
{
|
||||||
|
UnityWebRequest request = new UnityWebRequest($"{WebSite}/NesRomList?Page={page}&PageSize={pageSize}");
|
||||||
|
yield return request.SendWebRequest();
|
||||||
|
|
||||||
|
if (request.result != UnityWebRequest.Result.Success)
|
||||||
|
{
|
||||||
|
callback.Invoke(null);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp = JsonUtility.FromJson<Resp_GameList>(request.downloadHandler.text);
|
||||||
|
callback.Invoke(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Resp_GameList
|
||||||
|
{
|
||||||
|
public int Page { get; set; }
|
||||||
|
public int MaxPage { get; set; }
|
||||||
|
public int ResultAllCount { get; set; }
|
||||||
|
public List<Resp_RomInfo> GameList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Resp_RomInfo
|
||||||
|
{
|
||||||
|
public int ID { get; set; }
|
||||||
|
public string Hash { get; set; }
|
||||||
|
public string RomName { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
|
public string ImgUrl { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs.meta
Normal file
11
AxibugEmuOnline.Client/Assets/Script/Manager/HttpAPI.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 81bb136dc2c85304db4715953f751aa6
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
AxibugEmuOnline.Client/Assets/Script/Manager/RomLib.meta
Normal file
8
AxibugEmuOnline.Client/Assets/Script/Manager/RomLib.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 006d5604a1d73de4e8d057974313dbaf
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client
|
||||||
|
{
|
||||||
|
public enum EnumPlatform
|
||||||
|
{
|
||||||
|
NES
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 355fa00c125158f4ba90003b0fd5d788
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,46 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client
|
||||||
|
{
|
||||||
|
public class RomFile
|
||||||
|
{
|
||||||
|
private HttpAPI.Resp_RomInfo webData;
|
||||||
|
private bool hasLocalFile;
|
||||||
|
private string romName;
|
||||||
|
private EnumPlatform platform;
|
||||||
|
|
||||||
|
public string LocalFilePath => $"{Application.persistentDataPath}/RemoteRoms/{platform}/{romName}";
|
||||||
|
|
||||||
|
|
||||||
|
public RomFile(EnumPlatform platform)
|
||||||
|
{
|
||||||
|
this.platform = platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetRomFileData(Action<byte[]> callback)
|
||||||
|
{
|
||||||
|
if (webData == null) { callback.Invoke(null); return; }
|
||||||
|
if (hasLocalFile)
|
||||||
|
{
|
||||||
|
var path = LocalFilePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetWebData(HttpAPI.Resp_RomInfo resp_RomInfo)
|
||||||
|
{
|
||||||
|
webData = resp_RomInfo;
|
||||||
|
romName = Path.GetFileName(webData.Url);
|
||||||
|
|
||||||
|
if (File.Exists(LocalFilePath))
|
||||||
|
{
|
||||||
|
hasLocalFile = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hasLocalFile = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3a876afb939308548a7b4bdc53a3f6df
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,44 @@
|
|||||||
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client
|
||||||
|
{
|
||||||
|
public class RomLib
|
||||||
|
{
|
||||||
|
private List<RomFile> nesRomFiles = new List<RomFile>();
|
||||||
|
|
||||||
|
public void GetNesRomFile(int index, Action<RomFile> callback)
|
||||||
|
{
|
||||||
|
if (nesRomFiles.Count <= index)
|
||||||
|
{
|
||||||
|
int pageSize = 10;
|
||||||
|
int page = index / pageSize;
|
||||||
|
int indexInPage = index % page;
|
||||||
|
|
||||||
|
//填充空的RomFile数据
|
||||||
|
var needFill = index - nesRomFiles.Count + 1;
|
||||||
|
needFill += pageSize - indexInPage - 1;
|
||||||
|
for (int i = 0; i < needFill; i++)
|
||||||
|
{
|
||||||
|
nesRomFiles.Add(new RomFile(EnumPlatform.NES));
|
||||||
|
}
|
||||||
|
|
||||||
|
AppAxibugEmuOnline.httpAPI.GetNesRomList((romList) =>
|
||||||
|
{
|
||||||
|
if (romList == null)
|
||||||
|
{
|
||||||
|
callback.Invoke(null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < romList.GameList.Count; i++)
|
||||||
|
{
|
||||||
|
nesRomFiles[pageSize * (page - 1) + i].SetWebData(romList.GameList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, page, pageSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8b1860dd3aacece40a93ae8273fc71b1
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user