forked from sin365/AxibugEmuOnline
Compare commits
5 Commits
4af2168748
...
c147e1dd91
| Author | SHA1 | Date | |
|---|---|---|---|
| c147e1dd91 | |||
| 6a770fe4f1 | |||
| c8d18f90dd | |||
| 3fc31a11de | |||
| 6ec6e2d213 |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae0d9b04c112f5b4c98feb0af7ed5676
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf3c029a754c0dc40b15ce6b1962e31f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c4467b8175b4db64093d603a93775dff
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7478117b6f7d6cb4cb8c0f5d56205ea1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -3,6 +3,7 @@ using AxibugEmuOnline.Client.Network;
|
||||
using AxibugProtobuf;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
@ -22,14 +23,6 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
public static AppChat chat;
|
||||
public static UserDataManager user;
|
||||
public static AppEmu emu;
|
||||
/// <summary>
|
||||
/// nes Rom库
|
||||
/// </summary>
|
||||
public static RomLib nesRomLib;
|
||||
/// <summary>
|
||||
/// 收藏 Rom库
|
||||
/// </summary>
|
||||
public static RomLib starRomLib;
|
||||
public static HttpAPI httpAPI;
|
||||
public static CacheManager CacheMgr;
|
||||
public static AppRoom roomMgr;
|
||||
@ -39,6 +32,12 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
public static SaveSlotManager SavMgr;
|
||||
static bool bTest;
|
||||
static string mTestSrvIP;
|
||||
|
||||
|
||||
/// <summary> 收藏 Rom库 </summary>
|
||||
public static RomLib starRomLib;
|
||||
private static Dictionary<RomPlatformType, RomLib> s_romLibs = new Dictionary<RomPlatformType, RomLib>();
|
||||
|
||||
#region Mono
|
||||
public static TickLoop tickLoop;
|
||||
private static CoroutineRunner coRunner;
|
||||
@ -62,6 +61,11 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
}
|
||||
public static string PersistentDataRoot() => s_persistentRoot;
|
||||
|
||||
public static RomLib GetRomLib(RomPlatformType platform)
|
||||
{
|
||||
return s_romLibs[platform];
|
||||
}
|
||||
|
||||
public static void Init(bool isTest = false, string testSrvIP = "", bool bUseLocalWebApi = false, string mLocalWebApi = "")
|
||||
{
|
||||
log = new LogManager(OnLogOut);
|
||||
@ -81,7 +85,14 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
httpAPI = new HttpAPI();
|
||||
if (bUseLocalWebApi)
|
||||
httpAPI.WebHost = mLocalWebApi;
|
||||
nesRomLib = new RomLib(RomPlatformType.Nes);
|
||||
|
||||
foreach (RomPlatformType plat in Enum.GetValues(typeof(RomPlatformType)))
|
||||
{
|
||||
if (plat == RomPlatformType.All || plat == RomPlatformType.Invalid) continue;
|
||||
|
||||
s_romLibs[plat] = new RomLib(plat);
|
||||
}
|
||||
|
||||
starRomLib = new RomLib();
|
||||
CacheMgr = new CacheManager();
|
||||
roomMgr = new AppRoom();
|
||||
@ -121,6 +132,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static IEnumerator AppTickFlow()
|
||||
{
|
||||
while (true)
|
||||
@ -211,7 +223,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
||||
|
||||
private static void Tick()
|
||||
{
|
||||
nesRomLib.ExecuteFetchRomInfo();
|
||||
foreach (var romLib in s_romLibs.Values) romLib.ExecuteFetchRomInfo();
|
||||
starRomLib.ExecuteFetchRomInfo();
|
||||
|
||||
gamePadMgr.Update();
|
||||
|
||||
@ -32,7 +32,7 @@ namespace AxibugEmuOnline.Client.Manager
|
||||
if (!m_emuCore.IsNull()) StopGame();
|
||||
|
||||
var roomInfo = App.roomMgr.mineRoomMiniInfo;
|
||||
roomInfo.FetchRomFileInRoomInfo(RomPlatformType.Nes, (_, romFile) =>
|
||||
roomInfo.FetchRomFileInRoomInfo((_, romFile) =>
|
||||
{
|
||||
if (!romFile.RomReady) //这个rom并没有下载,所以取消进入房间
|
||||
{
|
||||
|
||||
@ -282,7 +282,8 @@ namespace AxibugEmuOnline.Client
|
||||
/// <summary>
|
||||
/// 是否收藏
|
||||
/// </summary>
|
||||
public int isStar;
|
||||
public int isStar;
|
||||
public List<int> parentRomIdsList;
|
||||
}
|
||||
[Serializable]
|
||||
public class Resp_CheckStandInfo
|
||||
|
||||
@ -4,6 +4,7 @@ using AxibugProtobuf;
|
||||
using ICSharpCode.SharpZipLib.Zip;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
@ -13,41 +14,103 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
private HttpAPI.Resp_RomInfo webData;
|
||||
private bool hasLocalFile;
|
||||
//private UnityWebRequest downloadRequest;
|
||||
private AxiHttpProxy.SendDownLoadProxy downloadRequest;
|
||||
/// <summary> 依赖的Rom文件 </summary>
|
||||
private List<RomFile> dependencies = new List<RomFile>();
|
||||
|
||||
public bool IsUserRom { get; private set; }
|
||||
/// <summary> 指示该Rom是否是多文件Rom </summary>
|
||||
public bool MultiFileRom
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (Platform)
|
||||
{
|
||||
case RomPlatformType.Nes: return false;
|
||||
case RomPlatformType.Cps1: return true;
|
||||
default: throw new NotImplementedException($"未实现的平台{Platform}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> 指示该Rom文件的存放路径 </summary>
|
||||
public string LocalFilePath =>
|
||||
IsUserRom ?
|
||||
$"{App.PersistentDataPath(Platform)}/UserRoms/{FileName}" :
|
||||
$"{App.PersistentDataPath(Platform)}/RemoteRoms/{FileName}";
|
||||
public string LocalFilePath => $"{App.PersistentDataPath(Platform)}/RemoteRoms/{FileName}";
|
||||
|
||||
/// <summary> 指示该Rom文件是否已下载完毕 </summary>
|
||||
public bool RomReady => hasLocalFile;
|
||||
///// <summary> 指示是否正在下载Rom文件 </summary>
|
||||
//public bool IsDownloading => downloadRequest != null && downloadRequest.result == UnityWebRequest.Result.InProgress;
|
||||
//public float Progress => IsDownloading ? downloadRequest.downloadProgress : 0;
|
||||
|
||||
public bool RomReady
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!hasLocalFile) return false;
|
||||
|
||||
foreach (var depRom in dependencies)
|
||||
{
|
||||
if (!depRom.RomReady) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/// <summary> 指示是否正在下载Rom文件 </summary>
|
||||
public bool IsDownloading => downloadRequest != null && !downloadRequest.downloadHandler.isDone;
|
||||
public float Progress => IsDownloading ? downloadRequest.downloadHandler.DownLoadPr : 0;
|
||||
|
||||
public bool IsDownloading
|
||||
{
|
||||
get
|
||||
{
|
||||
var selfDownloading = downloadRequest != null && !downloadRequest.downloadHandler.isDone;
|
||||
if (selfDownloading) return true;
|
||||
|
||||
foreach (var depRom in dependencies)
|
||||
{
|
||||
if (depRom.IsDownloading) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public float Progress
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsDownloading) return 0;
|
||||
|
||||
float total = 0f;
|
||||
|
||||
total += downloadRequest != null ? downloadRequest.downloadHandler.DownLoadPr : 0;
|
||||
foreach (var depRom in dependencies)
|
||||
{
|
||||
total += depRom.Progress;
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
}
|
||||
|
||||
public RomPlatformType Platform => webData != null ? (RomPlatformType)webData.ptype : RomPlatformType.Invalid;
|
||||
/// <summary> 指示该Rom信息是否已填充 </summary>
|
||||
public bool InfoReady => webData != null;
|
||||
public bool InfoReady
|
||||
{
|
||||
get
|
||||
{
|
||||
if (webData == null) return false;
|
||||
|
||||
foreach (var depRom in dependencies)
|
||||
{
|
||||
if (!depRom.InfoReady) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/// <summary> 唯一标识 </summary>
|
||||
public int ID => webData != null ? webData.id : -1;
|
||||
/// <summary> 别名 </summary>
|
||||
public string Alias => IsUserRom ? Path.GetFileNameWithoutExtension(FileName) : webData.romName;
|
||||
public string Alias => webData.romName;
|
||||
/// <summary> 描述 </summary>
|
||||
public string Descript => IsUserRom ? string.Empty : webData.desc;
|
||||
public string Descript => webData.desc;
|
||||
/// <summary> 游戏类型 </summary>
|
||||
public string GameTypeDes => IsUserRom ? string.Empty : webData.gType;
|
||||
public string GameTypeDes => webData.gType;
|
||||
/// <summary> 小图URL </summary>
|
||||
public string ImageURL => IsUserRom ? string.Empty : webData.imgUrl;
|
||||
public string ImageURL => webData.imgUrl;
|
||||
|
||||
/// <summary> 文件名 </summary>
|
||||
public string FileName { get; private set; }
|
||||
@ -81,25 +144,67 @@ namespace AxibugEmuOnline.Client
|
||||
if (RomReady) return;
|
||||
if (IsDownloading) return;
|
||||
|
||||
//检查依赖Rom的下载情况
|
||||
|
||||
App.StartCoroutine(DownloadRemoteRom((bytes) =>
|
||||
{
|
||||
if (bytes != null)
|
||||
{
|
||||
var directPath = Path.GetDirectoryName(LocalFilePath);
|
||||
Directory.CreateDirectory(directPath);
|
||||
|
||||
File.WriteAllBytes(LocalFilePath, bytes);
|
||||
hasLocalFile = true;
|
||||
|
||||
Eventer.Instance.PostEvent(EEvent.OnRomFileDownloaded, ID);
|
||||
}
|
||||
OnDownloadOver?.Invoke(this);
|
||||
{
|
||||
HandleRomFilePostProcess(bytes);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleRomFilePostProcess(byte[] bytes)
|
||||
{
|
||||
if (bytes == null) return;
|
||||
|
||||
if (MultiFileRom)
|
||||
{
|
||||
Dictionary<string, byte[]> unzipFiles = new Dictionary<string, byte[]>();
|
||||
//多rom文件的平台,下载下来的数据直接解压放入文件夹内
|
||||
var zip = new ZipInputStream(new MemoryStream(bytes));
|
||||
while (true)
|
||||
{
|
||||
var currentEntry = zip.GetNextEntry();
|
||||
if (currentEntry == null) break;
|
||||
|
||||
if (currentEntry.IsDirectory) continue;
|
||||
|
||||
var buffer = new byte[1024];
|
||||
MemoryStream output = new MemoryStream();
|
||||
while (true)
|
||||
{
|
||||
var size = zip.Read(buffer, 0, buffer.Length);
|
||||
if (size == 0) break;
|
||||
else output.Write(buffer, 0, size);
|
||||
}
|
||||
output.Flush();
|
||||
unzipFiles[$"{LocalFilePath}/{currentEntry.Name}"] = output.ToArray();
|
||||
}
|
||||
|
||||
foreach (var item in unzipFiles)
|
||||
{
|
||||
var path = item.Key;
|
||||
var data = item.Value;
|
||||
File.WriteAllBytes(path, data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var directPath = Path.GetDirectoryName(LocalFilePath);
|
||||
Directory.CreateDirectory(directPath);
|
||||
|
||||
File.WriteAllBytes(LocalFilePath, bytes);
|
||||
hasLocalFile = true;
|
||||
|
||||
Eventer.Instance.PostEvent(EEvent.OnRomFileDownloaded, ID);
|
||||
}
|
||||
OnDownloadOver?.Invoke(this);
|
||||
}
|
||||
|
||||
public byte[] GetRomFileData()
|
||||
{
|
||||
if (!IsUserRom && webData == null) throw new Exception("Not Valid Rom");
|
||||
Debug.Assert(!MultiFileRom, "仅供单文件Rom使用的接口");
|
||||
|
||||
if (webData == null) throw new Exception("Not Valid Rom");
|
||||
if (!RomReady) throw new Exception("Rom File Not Downloaded");
|
||||
|
||||
var bytes = File.ReadAllBytes(LocalFilePath);
|
||||
@ -146,50 +251,45 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
var request = downloadRequest;
|
||||
downloadRequest = null;
|
||||
|
||||
if (!request.downloadHandler.bHadErr)
|
||||
callback(request.downloadHandler.data);
|
||||
else
|
||||
callback(null);
|
||||
|
||||
//downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
|
||||
//yield return downloadRequest.SendWebRequest();
|
||||
|
||||
//var request = downloadRequest;
|
||||
//downloadRequest = null;
|
||||
|
||||
//if (request.result != UnityWebRequest.Result.Success)
|
||||
//{
|
||||
// callback(null);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// callback(request.downloadHandler.data);
|
||||
//}
|
||||
}
|
||||
|
||||
public void SetWebData(HttpAPI.Resp_RomInfo resp_RomInfo)
|
||||
{
|
||||
webData = resp_RomInfo;
|
||||
FileName = Path.GetFileName(webData.url);
|
||||
FileName = MultiFileRom ? Path.GetFileNameWithoutExtension(webData.url) : Path.GetFileName(webData.url);
|
||||
FileName = System.Net.WebUtility.UrlDecode(FileName);
|
||||
|
||||
if (File.Exists(LocalFilePath))
|
||||
{
|
||||
var fileBytes = File.ReadAllBytes(LocalFilePath);
|
||||
var localHash = RomLib.CalcHash(fileBytes);
|
||||
|
||||
hasLocalFile = localHash == webData.hash;
|
||||
if (!hasLocalFile)
|
||||
File.Delete(LocalFilePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
hasLocalFile = false;
|
||||
if (MultiFileRom)
|
||||
hasLocalFile = Directory.Exists(LocalFilePath);
|
||||
else
|
||||
hasLocalFile = File.Exists(LocalFilePath);
|
||||
|
||||
//收集依赖Rom
|
||||
if (webData.parentRomIdsList != null)
|
||||
{
|
||||
foreach (var romID in webData.parentRomIdsList)
|
||||
{
|
||||
var romFile = new RomFile(Index, Page);
|
||||
dependencies.Add(romFile);
|
||||
App.StartCoroutine(App.httpAPI.GetRomInfo(romID, (romInfo) =>
|
||||
{
|
||||
romFile.SetWebData(romInfo);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
OnInfoFilled?.Invoke();
|
||||
App.StartCoroutine(WaitInfoReady());
|
||||
}
|
||||
|
||||
private IEnumerator WaitInfoReady()
|
||||
{
|
||||
while (!InfoReady) yield return null;
|
||||
|
||||
OnInfoFilled?.Invoke();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugProtobuf;
|
||||
using AxiReplay;
|
||||
using System;
|
||||
using System.IO;
|
||||
@ -20,7 +21,7 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
try
|
||||
{
|
||||
var romFile = App.nesRomLib.GetRomFile(fname);
|
||||
var romFile = App.GetRomLib(RomPlatformType.Nes).GetRomFile(fname);
|
||||
var bytes = romFile.GetRomFileData();
|
||||
Debug.Log($"Open {romFile.Alias}");
|
||||
return new MemoryStream(bytes);
|
||||
@ -34,7 +35,7 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
public void GetRomPathInfo(string fname, out string fullPath, out string directPath)
|
||||
{
|
||||
var romFile = App.nesRomLib.GetRomFile(fname);
|
||||
var romFile = App.GetRomLib(RomPlatformType.Nes).GetRomFile(fname);
|
||||
UnityEngine.Debug.Assert(romFile != null);
|
||||
|
||||
fullPath = romFile.LocalFilePath;
|
||||
|
||||
@ -70,7 +70,7 @@ namespace AxibugEmuOnline.Client
|
||||
Supporter.Setup(m_coreSupporter);
|
||||
Debuger.Setup(new CoreDebuger());
|
||||
|
||||
App.nesRomLib.AddRomFile(rom);
|
||||
App.GetRomLib(RomPlatformType.Nes).AddRomFile(rom);
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
@ -157,15 +157,16 @@ namespace AxibugProtobuf {
|
||||
"bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS",
|
||||
"Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW",
|
||||
"aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl",
|
||||
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKqIBCg9Sb21QbGF0",
|
||||
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKssBCg9Sb21QbGF0",
|
||||
"Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0",
|
||||
"ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95",
|
||||
"X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT",
|
||||
"R18xMDAwEAgSCAoDQWxsEOcHKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9uZV9H",
|
||||
"YW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQAhIN",
|
||||
"CglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAFKk4K",
|
||||
"EUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jhc2VE",
|
||||
"ZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90bzM="));
|
||||
"R18xMDAwEAgSCgoGTkVPR0VPEBQSBwoDSUdTEBUSCAoEQ1BTMRAWEggKBENQ",
|
||||
"UzIQFxIICgNBbGwQ5wcqcAoNUm9vbUdhbWVTdGF0ZRISCg5Ob25lX0dhbWVT",
|
||||
"dGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0ZRACEg0KCVdh",
|
||||
"aXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1lEAUqTgoRTG9n",
|
||||
"aW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFzZURlZmF1",
|
||||
"bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3RvMw=="));
|
||||
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||
new pbr::FileDescriptor[] { },
|
||||
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.GamePadType), typeof(global::AxibugProtobuf.RomPlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
|
||||
@ -473,6 +474,10 @@ namespace AxibugProtobuf {
|
||||
[pbr::OriginalName("Coleco_Vision")] ColecoVision = 6,
|
||||
[pbr::OriginalName("SC_3000")] Sc3000 = 7,
|
||||
[pbr::OriginalName("SG_1000")] Sg1000 = 8,
|
||||
[pbr::OriginalName("NEOGEO")] Neogeo = 20,
|
||||
[pbr::OriginalName("IGS")] Igs = 21,
|
||||
[pbr::OriginalName("CPS1")] Cps1 = 22,
|
||||
[pbr::OriginalName("CPS2")] Cps2 = 23,
|
||||
[pbr::OriginalName("All")] All = 999,
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using AxibugEmuOnline.Client.ClientCore;
|
||||
using AxibugEmuOnline.Client.Event;
|
||||
using AxibugEmuOnline.Client.UI;
|
||||
using AxibugProtobuf;
|
||||
using Coffee.UIExtensions;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
@ -35,7 +36,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
public int RomID { get { return m_romfile != null && m_romfile.InfoReady ? m_romfile.ID : -1; } }
|
||||
|
||||
private RomLib m_romlib => App.nesRomLib;
|
||||
private RomLib m_romlib => App.GetRomLib(m_romfile.Platform);
|
||||
|
||||
public bool RomInfoReady => m_romfile != null && m_romfile.InfoReady;
|
||||
|
||||
|
||||
@ -17,16 +17,7 @@ namespace AxibugEmuOnline.Client
|
||||
get
|
||||
{
|
||||
if (StarRom) return App.starRomLib;
|
||||
else
|
||||
{
|
||||
switch (Platform)
|
||||
{
|
||||
case RomPlatformType.Nes:
|
||||
return App.nesRomLib;
|
||||
default:
|
||||
throw new System.NotImplementedException($"未实现的平台 {Platform}");
|
||||
}
|
||||
}
|
||||
else return App.GetRomLib(Platform);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -95,7 +95,7 @@ namespace AxibugEmuOnline.Client
|
||||
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
|
||||
SetIcon(null);
|
||||
|
||||
roomInfo.FetchRomFileInRoomInfo(roomInfo.GamePlatformType, (room, romFile) =>
|
||||
roomInfo.FetchRomFileInRoomInfo((room, romFile) =>
|
||||
{
|
||||
if (room.RoomID != RoomID) return;
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
|
||||
private static Dictionary<int, RomFile> s_RomFileCahcesInRoomInfo = new Dictionary<int, RomFile>();
|
||||
public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, RomPlatformType platform, Action<Protobuf_Room_MiniInfo, RomFile> callback)
|
||||
public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, Action<Protobuf_Room_MiniInfo, RomFile> callback)
|
||||
{
|
||||
RomFile romFile;
|
||||
|
||||
@ -42,20 +42,16 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
callback.Invoke(roomInfo, romFile);
|
||||
return;
|
||||
}
|
||||
switch (platform)
|
||||
{
|
||||
case RomPlatformType.Nes:
|
||||
App.StartCoroutine(App.httpAPI.GetRomInfo(roomInfo.GameRomID, (romWebData) =>
|
||||
{
|
||||
RomFile _romFile = new RomFile(0, 0);
|
||||
_romFile.SetWebData(romWebData);
|
||||
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = _romFile;
|
||||
|
||||
callback.Invoke(roomInfo, _romFile);
|
||||
}));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
App.StartCoroutine(App.httpAPI.GetRomInfo(roomInfo.GameRomID, (romWebData) =>
|
||||
{
|
||||
RomFile _romFile = new RomFile(0, 0);
|
||||
_romFile.SetWebData(romWebData);
|
||||
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = _romFile;
|
||||
|
||||
callback.Invoke(roomInfo, _romFile);
|
||||
}));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,8 +2,7 @@ using AxibugEmuOnline.Web.Common;
|
||||
using AxibugProtobuf;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using MySql.Data.MySqlClient;
|
||||
using Mysqlx.Crud;
|
||||
using System.Reflection.PortableExecutable;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace AxibugEmuOnline.Web.Controllers
|
||||
{
|
||||
@ -16,7 +15,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
static bool TryDecrypToken(string tokenStr,out Protobuf_Token_Struct tokenData)
|
||||
static bool TryDecrypToken(string tokenStr, out Protobuf_Token_Struct tokenData)
|
||||
{
|
||||
if (string.IsNullOrEmpty(tokenStr) || string.IsNullOrEmpty(tokenStr.Trim()))
|
||||
{
|
||||
@ -53,7 +52,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public JsonResult RomList(string SearchKey, int Ptype, int GType, int Page, int PageSize,string Token)
|
||||
public JsonResult RomList(string SearchKey, int Ptype, int GType, int Page, int PageSize, string Token)
|
||||
{
|
||||
long UID = 0;
|
||||
if (TryDecrypToken(Token, out Protobuf_Token_Struct tokenData))
|
||||
@ -99,7 +98,10 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
{
|
||||
resp.resultAllCount = reader.GetInt32(0);
|
||||
resp.page = Page;
|
||||
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
|
||||
if (PageSize > 0)
|
||||
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
|
||||
else
|
||||
resp.maxPage = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -107,7 +109,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
|
||||
string HotOrderBy = "ORDER BY playcount DESC, id ASC";
|
||||
|
||||
query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType` FROM romlist where `Name` like ?searchPattern {platformCond} {GameTypeCond} {HotOrderBy} LIMIT ?offset, ?pageSize;";
|
||||
query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType`,`parentids` FROM romlist where `Name` like ?searchPattern {platformCond} {GameTypeCond} {HotOrderBy} LIMIT ?offset, ?pageSize;";
|
||||
using (var command = new MySqlCommand(query, conn))
|
||||
{
|
||||
// 设置参数值
|
||||
@ -134,7 +136,15 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
stars = reader.GetInt32(8),
|
||||
ptype = reader.GetInt32(9),
|
||||
};
|
||||
|
||||
string parentsStr = !reader.IsDBNull(10) ? reader.GetString(10) : string.Empty;
|
||||
if (!string.IsNullOrEmpty(parentsStr))
|
||||
{
|
||||
int[] arr = Array.ConvertAll(parentsStr.Split(',', StringSplitOptions.RemoveEmptyEntries), s => int.Parse(s));
|
||||
for (int i = 0; i < arr.Length; i++)
|
||||
{
|
||||
data.parentRomIdsList.Add(arr[i]);
|
||||
}
|
||||
}
|
||||
if (UID > 0)
|
||||
{
|
||||
if (CheckIsRomStar(data.id, UID))
|
||||
@ -199,7 +209,10 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
{
|
||||
resp.resultAllCount = reader.GetInt32(0);
|
||||
resp.page = Page;
|
||||
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
|
||||
if (PageSize > 0)
|
||||
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
|
||||
else
|
||||
resp.maxPage = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -207,7 +220,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
||||
|
||||
string HotOrderBy = "ORDER BY playcount DESC, id ASC";
|
||||
|
||||
query = @$"SELECT romlist.id,romlist.`Name`,romlist.GameType,romlist.Note,romlist.RomUrl,romlist.ImgUrl,romlist.`Hash`,romlist.`playcount`,romlist.`stars`,romlist.`PlatformType`
|
||||
query = @$"SELECT romlist.id,romlist.`Name`,romlist.GameType,romlist.Note,romlist.RomUrl,romlist.ImgUrl,romlist.`Hash`,romlist.`playcount`,romlist.`stars`,romlist.`PlatformType` ,mlist.`parentids`
|
||||
from rom_stars
|
||||
LEFT JOIN romlist on romlist.Id = rom_stars.romid
|
||||
where rom_stars.uid = ?uid
|
||||
@ -240,6 +253,15 @@ LIMIT ?offset, ?pageSize;";
|
||||
stars = reader.GetInt32(8),
|
||||
ptype = reader.GetInt32(9),
|
||||
};
|
||||
string parentsStr = !reader.IsDBNull(10) ? reader.GetString(10) : string.Empty;
|
||||
if (!string.IsNullOrEmpty(parentsStr))
|
||||
{
|
||||
int[] arr = Array.ConvertAll(parentsStr.Split(',', StringSplitOptions.RemoveEmptyEntries), s => int.Parse(s));
|
||||
for (int i = 0; i < arr.Length; i++)
|
||||
{
|
||||
data.parentRomIdsList.Add(arr[i]);
|
||||
}
|
||||
}
|
||||
|
||||
//毕竟都是已经收藏了的
|
||||
data.isStar = 1;
|
||||
@ -266,7 +288,7 @@ LIMIT ?offset, ?pageSize;";
|
||||
Resp_RomInfo resp = new Resp_RomInfo();
|
||||
MySqlConnection conn = SQLPool.DequeueSQLConn("NesRomList");
|
||||
{
|
||||
string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType` FROM romlist where id = ?romid;";
|
||||
string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType`,mlist.`parentids` FROM romlist where id = ?romid;";
|
||||
using (var command = new MySqlCommand(query, conn))
|
||||
{
|
||||
// 设置参数值
|
||||
@ -286,6 +308,15 @@ LIMIT ?offset, ?pageSize;";
|
||||
resp.playcount = reader.GetInt32(7);
|
||||
resp.stars = reader.GetInt32(8);
|
||||
resp.ptype = reader.GetInt32(9);
|
||||
string parentsStr = !reader.IsDBNull(10) ? reader.GetString(10) : string.Empty;
|
||||
if (!string.IsNullOrEmpty(parentsStr))
|
||||
{
|
||||
int[] arr = Array.ConvertAll(parentsStr.Split(',', StringSplitOptions.RemoveEmptyEntries), s => int.Parse(s));
|
||||
for (int i = 0; i < arr.Length; i++)
|
||||
{
|
||||
resp.parentRomIdsList.Add(arr[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -388,7 +419,7 @@ LIMIT ?offset, ?pageSize;";
|
||||
public int stars { get; set; }
|
||||
public int playcount { get; set; }
|
||||
public int isStar { get; set; }
|
||||
|
||||
public List<int> parentRomIdsList { get; set; } = new List<int>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -157,15 +157,16 @@ namespace AxibugProtobuf {
|
||||
"bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS",
|
||||
"Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW",
|
||||
"aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl",
|
||||
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKqIBCg9Sb21QbGF0",
|
||||
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKssBCg9Sb21QbGF0",
|
||||
"Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0",
|
||||
"ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95",
|
||||
"X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT",
|
||||
"R18xMDAwEAgSCAoDQWxsEOcHKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9uZV9H",
|
||||
"YW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQAhIN",
|
||||
"CglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAFKk4K",
|
||||
"EUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jhc2VE",
|
||||
"ZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90bzM="));
|
||||
"R18xMDAwEAgSCgoGTkVPR0VPEBQSBwoDSUdTEBUSCAoEQ1BTMRAWEggKBENQ",
|
||||
"UzIQFxIICgNBbGwQ5wcqcAoNUm9vbUdhbWVTdGF0ZRISCg5Ob25lX0dhbWVT",
|
||||
"dGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0ZRACEg0KCVdh",
|
||||
"aXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1lEAUqTgoRTG9n",
|
||||
"aW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFzZURlZmF1",
|
||||
"bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3RvMw=="));
|
||||
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||
new pbr::FileDescriptor[] { },
|
||||
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.GamePadType), typeof(global::AxibugProtobuf.RomPlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
|
||||
@ -473,6 +474,10 @@ namespace AxibugProtobuf {
|
||||
[pbr::OriginalName("Coleco_Vision")] ColecoVision = 6,
|
||||
[pbr::OriginalName("SC_3000")] Sc3000 = 7,
|
||||
[pbr::OriginalName("SG_1000")] Sg1000 = 8,
|
||||
[pbr::OriginalName("NEOGEO")] Neogeo = 20,
|
||||
[pbr::OriginalName("IGS")] Igs = 21,
|
||||
[pbr::OriginalName("CPS1")] Cps1 = 22,
|
||||
[pbr::OriginalName("CPS2")] Cps2 = 23,
|
||||
[pbr::OriginalName("All")] All = 999,
|
||||
}
|
||||
|
||||
|
||||
@ -143,6 +143,10 @@ enum RomPlatformType
|
||||
Coleco_Vision = 6;
|
||||
SC_3000 = 7;
|
||||
SG_1000 = 8;
|
||||
NEOGEO = 20;
|
||||
IGS = 21;
|
||||
CPS1 = 22;
|
||||
CPS2 = 23;
|
||||
All = 999;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user