Compare commits

..

No commits in common. "c147e1dd91c801ba5033108657c2289d167ddc92" and "4af2168748c650cd0b07000196ff2246473ead9f" have entirely different histories.

23 changed files with 1161 additions and 6581 deletions

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ae0d9b04c112f5b4c98feb0af7ed5676
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: cf3c029a754c0dc40b15ce6b1962e31f
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: c4467b8175b4db64093d603a93775dff
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 7478117b6f7d6cb4cb8c0f5d56205ea1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -3,7 +3,6 @@ using AxibugEmuOnline.Client.Network;
using AxibugProtobuf; using AxibugProtobuf;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
@ -23,6 +22,14 @@ namespace AxibugEmuOnline.Client.ClientCore
public static AppChat chat; public static AppChat chat;
public static UserDataManager user; public static UserDataManager user;
public static AppEmu emu; 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 HttpAPI httpAPI;
public static CacheManager CacheMgr; public static CacheManager CacheMgr;
public static AppRoom roomMgr; public static AppRoom roomMgr;
@ -32,12 +39,6 @@ namespace AxibugEmuOnline.Client.ClientCore
public static SaveSlotManager SavMgr; public static SaveSlotManager SavMgr;
static bool bTest; static bool bTest;
static string mTestSrvIP; static string mTestSrvIP;
/// <summary> 收藏 Rom库 </summary>
public static RomLib starRomLib;
private static Dictionary<RomPlatformType, RomLib> s_romLibs = new Dictionary<RomPlatformType, RomLib>();
#region Mono #region Mono
public static TickLoop tickLoop; public static TickLoop tickLoop;
private static CoroutineRunner coRunner; private static CoroutineRunner coRunner;
@ -61,11 +62,6 @@ namespace AxibugEmuOnline.Client.ClientCore
} }
public static string PersistentDataRoot() => s_persistentRoot; 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 = "") public static void Init(bool isTest = false, string testSrvIP = "", bool bUseLocalWebApi = false, string mLocalWebApi = "")
{ {
log = new LogManager(OnLogOut); log = new LogManager(OnLogOut);
@ -85,14 +81,7 @@ namespace AxibugEmuOnline.Client.ClientCore
httpAPI = new HttpAPI(); httpAPI = new HttpAPI();
if (bUseLocalWebApi) if (bUseLocalWebApi)
httpAPI.WebHost = mLocalWebApi; 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(); starRomLib = new RomLib();
CacheMgr = new CacheManager(); CacheMgr = new CacheManager();
roomMgr = new AppRoom(); roomMgr = new AppRoom();
@ -132,7 +121,6 @@ namespace AxibugEmuOnline.Client.ClientCore
} }
private static IEnumerator AppTickFlow() private static IEnumerator AppTickFlow()
{ {
while (true) while (true)
@ -223,7 +211,7 @@ namespace AxibugEmuOnline.Client.ClientCore
private static void Tick() private static void Tick()
{ {
foreach (var romLib in s_romLibs.Values) romLib.ExecuteFetchRomInfo(); nesRomLib.ExecuteFetchRomInfo();
starRomLib.ExecuteFetchRomInfo(); starRomLib.ExecuteFetchRomInfo();
gamePadMgr.Update(); gamePadMgr.Update();

View File

@ -32,7 +32,7 @@ namespace AxibugEmuOnline.Client.Manager
if (!m_emuCore.IsNull()) StopGame(); if (!m_emuCore.IsNull()) StopGame();
var roomInfo = App.roomMgr.mineRoomMiniInfo; var roomInfo = App.roomMgr.mineRoomMiniInfo;
roomInfo.FetchRomFileInRoomInfo((_, romFile) => roomInfo.FetchRomFileInRoomInfo(RomPlatformType.Nes, (_, romFile) =>
{ {
if (!romFile.RomReady) //这个rom并没有下载,所以取消进入房间 if (!romFile.RomReady) //这个rom并没有下载,所以取消进入房间
{ {

View File

@ -282,8 +282,7 @@ namespace AxibugEmuOnline.Client
/// <summary> /// <summary>
/// 是否收藏 /// 是否收藏
/// </summary> /// </summary>
public int isStar; public int isStar;
public List<int> parentRomIdsList;
} }
[Serializable] [Serializable]
public class Resp_CheckStandInfo public class Resp_CheckStandInfo

View File

@ -4,7 +4,6 @@ using AxibugProtobuf;
using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Zip;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.IO; using System.IO;
using UnityEngine; using UnityEngine;
@ -14,103 +13,41 @@ namespace AxibugEmuOnline.Client
{ {
private HttpAPI.Resp_RomInfo webData; private HttpAPI.Resp_RomInfo webData;
private bool hasLocalFile; private bool hasLocalFile;
//private UnityWebRequest downloadRequest;
private AxiHttpProxy.SendDownLoadProxy downloadRequest; private AxiHttpProxy.SendDownLoadProxy downloadRequest;
/// <summary> 依赖的Rom文件 </summary>
private List<RomFile> dependencies = new List<RomFile>();
/// <summary> 指示该Rom是否是多文件Rom </summary> public bool IsUserRom { get; private set; }
public bool MultiFileRom
{
get
{
switch (Platform)
{
case RomPlatformType.Nes: return false;
case RomPlatformType.Cps1: return true;
default: throw new NotImplementedException($"未实现的平台{Platform}");
}
}
}
/// <summary> 指示该Rom文件的存放路径 </summary> /// <summary> 指示该Rom文件的存放路径 </summary>
public string LocalFilePath => $"{App.PersistentDataPath(Platform)}/RemoteRoms/{FileName}"; public string LocalFilePath =>
IsUserRom ?
$"{App.PersistentDataPath(Platform)}/UserRoms/{FileName}" :
$"{App.PersistentDataPath(Platform)}/RemoteRoms/{FileName}";
/// <summary> 指示该Rom文件是否已下载完毕 </summary> /// <summary> 指示该Rom文件是否已下载完毕 </summary>
public bool RomReady public bool RomReady => hasLocalFile;
{ ///// <summary> 指示是否正在下载Rom文件 </summary>
get //public bool IsDownloading => downloadRequest != null && downloadRequest.result == UnityWebRequest.Result.InProgress;
{ //public float Progress => IsDownloading ? downloadRequest.downloadProgress : 0;
if (!hasLocalFile) return false;
foreach (var depRom in dependencies)
{
if (!depRom.RomReady) return false;
}
return true;
}
}
/// <summary> 指示是否正在下载Rom文件 </summary> /// <summary> 指示是否正在下载Rom文件 </summary>
public bool IsDownloading public bool IsDownloading => downloadRequest != null && !downloadRequest.downloadHandler.isDone;
{ public float Progress => IsDownloading ? downloadRequest.downloadHandler.DownLoadPr : 0;
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; public RomPlatformType Platform => webData != null ? (RomPlatformType)webData.ptype : RomPlatformType.Invalid;
/// <summary> 指示该Rom信息是否已填充 </summary> /// <summary> 指示该Rom信息是否已填充 </summary>
public bool InfoReady public bool InfoReady => webData != null;
{
get
{
if (webData == null) return false;
foreach (var depRom in dependencies)
{
if (!depRom.InfoReady) return false;
}
return true;
}
}
/// <summary> 唯一标识 </summary> /// <summary> 唯一标识 </summary>
public int ID => webData != null ? webData.id : -1; public int ID => webData != null ? webData.id : -1;
/// <summary> 别名 </summary> /// <summary> 别名 </summary>
public string Alias => webData.romName; public string Alias => IsUserRom ? Path.GetFileNameWithoutExtension(FileName) : webData.romName;
/// <summary> 描述 </summary> /// <summary> 描述 </summary>
public string Descript => webData.desc; public string Descript => IsUserRom ? string.Empty : webData.desc;
/// <summary> 游戏类型 </summary> /// <summary> 游戏类型 </summary>
public string GameTypeDes => webData.gType; public string GameTypeDes => IsUserRom ? string.Empty : webData.gType;
/// <summary> 小图URL </summary> /// <summary> 小图URL </summary>
public string ImageURL => webData.imgUrl; public string ImageURL => IsUserRom ? string.Empty : webData.imgUrl;
/// <summary> 文件名 </summary> /// <summary> 文件名 </summary>
public string FileName { get; private set; } public string FileName { get; private set; }
@ -144,67 +81,25 @@ namespace AxibugEmuOnline.Client
if (RomReady) return; if (RomReady) return;
if (IsDownloading) return; if (IsDownloading) return;
//检查依赖Rom的下载情况
App.StartCoroutine(DownloadRemoteRom((bytes) => App.StartCoroutine(DownloadRemoteRom((bytes) =>
{ {
HandleRomFilePostProcess(bytes); if (bytes != null)
}));
}
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(); var directPath = Path.GetDirectoryName(LocalFilePath);
if (currentEntry == null) break; Directory.CreateDirectory(directPath);
if (currentEntry.IsDirectory) continue; File.WriteAllBytes(LocalFilePath, bytes);
hasLocalFile = true;
Eventer.Instance.PostEvent(EEvent.OnRomFileDownloaded, ID);
}
OnDownloadOver?.Invoke(this);
}));
}
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() public byte[] GetRomFileData()
{ {
Debug.Assert(!MultiFileRom, "仅供单文件Rom使用的接口"); if (!IsUserRom && webData == null) throw new Exception("Not Valid Rom");
if (webData == null) throw new Exception("Not Valid Rom");
if (!RomReady) throw new Exception("Rom File Not Downloaded"); if (!RomReady) throw new Exception("Rom File Not Downloaded");
var bytes = File.ReadAllBytes(LocalFilePath); var bytes = File.ReadAllBytes(LocalFilePath);
@ -251,45 +146,50 @@ namespace AxibugEmuOnline.Client
var request = downloadRequest; var request = downloadRequest;
downloadRequest = null; downloadRequest = null;
if (!request.downloadHandler.bHadErr) if (!request.downloadHandler.bHadErr)
callback(request.downloadHandler.data); callback(request.downloadHandler.data);
else else
callback(null); 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) public void SetWebData(HttpAPI.Resp_RomInfo resp_RomInfo)
{ {
webData = resp_RomInfo; webData = resp_RomInfo;
FileName = MultiFileRom ? Path.GetFileNameWithoutExtension(webData.url) : Path.GetFileName(webData.url); FileName = Path.GetFileName(webData.url);
FileName = System.Net.WebUtility.UrlDecode(FileName); FileName = System.Net.WebUtility.UrlDecode(FileName);
if (MultiFileRom) if (File.Exists(LocalFilePath))
hasLocalFile = Directory.Exists(LocalFilePath); {
else var fileBytes = File.ReadAllBytes(LocalFilePath);
hasLocalFile = File.Exists(LocalFilePath); var localHash = RomLib.CalcHash(fileBytes);
//收集依赖Rom hasLocalFile = localHash == webData.hash;
if (webData.parentRomIdsList != null) if (!hasLocalFile)
{ File.Delete(LocalFilePath);
foreach (var romID in webData.parentRomIdsList) }
{ else
var romFile = new RomFile(Index, Page); {
dependencies.Add(romFile); hasLocalFile = false;
App.StartCoroutine(App.httpAPI.GetRomInfo(romID, (romInfo) =>
{
romFile.SetWebData(romInfo);
}));
}
} }
App.StartCoroutine(WaitInfoReady()); OnInfoFilled?.Invoke();
}
private IEnumerator WaitInfoReady()
{
while (!InfoReady) yield return null;
OnInfoFilled?.Invoke();
} }
} }
} }

View File

@ -1,5 +1,4 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugProtobuf;
using AxiReplay; using AxiReplay;
using System; using System;
using System.IO; using System.IO;
@ -21,7 +20,7 @@ namespace AxibugEmuOnline.Client
{ {
try try
{ {
var romFile = App.GetRomLib(RomPlatformType.Nes).GetRomFile(fname); var romFile = App.nesRomLib.GetRomFile(fname);
var bytes = romFile.GetRomFileData(); var bytes = romFile.GetRomFileData();
Debug.Log($"Open {romFile.Alias}"); Debug.Log($"Open {romFile.Alias}");
return new MemoryStream(bytes); return new MemoryStream(bytes);
@ -35,7 +34,7 @@ namespace AxibugEmuOnline.Client
public void GetRomPathInfo(string fname, out string fullPath, out string directPath) public void GetRomPathInfo(string fname, out string fullPath, out string directPath)
{ {
var romFile = App.GetRomLib(RomPlatformType.Nes).GetRomFile(fname); var romFile = App.nesRomLib.GetRomFile(fname);
UnityEngine.Debug.Assert(romFile != null); UnityEngine.Debug.Assert(romFile != null);
fullPath = romFile.LocalFilePath; fullPath = romFile.LocalFilePath;

View File

@ -70,7 +70,7 @@ namespace AxibugEmuOnline.Client
Supporter.Setup(m_coreSupporter); Supporter.Setup(m_coreSupporter);
Debuger.Setup(new CoreDebuger()); Debuger.Setup(new CoreDebuger());
App.GetRomLib(RomPlatformType.Nes).AddRomFile(rom); App.nesRomLib.AddRomFile(rom);
try try
{ {

View File

@ -157,16 +157,15 @@ namespace AxibugProtobuf {
"bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS", "bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS",
"Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW", "Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW",
"aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl", "aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl",
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKssBCg9Sb21QbGF0", "Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKqIBCg9Sb21QbGF0",
"Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0", "Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0",
"ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95", "ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95",
"X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT", "X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT",
"R18xMDAwEAgSCgoGTkVPR0VPEBQSBwoDSUdTEBUSCAoEQ1BTMRAWEggKBENQ", "R18xMDAwEAgSCAoDQWxsEOcHKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9uZV9H",
"UzIQFxIICgNBbGwQ5wcqcAoNUm9vbUdhbWVTdGF0ZRISCg5Ob25lX0dhbWVT", "YW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQAhIN",
"dGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0ZRACEg0KCVdh", "CglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAFKk4K",
"aXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1lEAUqTgoRTG9n", "EUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jhc2VE",
"aW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFzZURlZmF1", "ZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90bzM="));
"bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, 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[] { 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[] {
@ -474,10 +473,6 @@ namespace AxibugProtobuf {
[pbr::OriginalName("Coleco_Vision")] ColecoVision = 6, [pbr::OriginalName("Coleco_Vision")] ColecoVision = 6,
[pbr::OriginalName("SC_3000")] Sc3000 = 7, [pbr::OriginalName("SC_3000")] Sc3000 = 7,
[pbr::OriginalName("SG_1000")] Sg1000 = 8, [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, [pbr::OriginalName("All")] All = 999,
} }

View File

@ -1,7 +1,6 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Event;
using AxibugEmuOnline.Client.UI; using AxibugEmuOnline.Client.UI;
using AxibugProtobuf;
using Coffee.UIExtensions; using Coffee.UIExtensions;
using System; using System;
using UnityEngine; using UnityEngine;
@ -36,7 +35,7 @@ namespace AxibugEmuOnline.Client
} }
public int RomID { get { return m_romfile != null && m_romfile.InfoReady ? m_romfile.ID : -1; } } public int RomID { get { return m_romfile != null && m_romfile.InfoReady ? m_romfile.ID : -1; } }
private RomLib m_romlib => App.GetRomLib(m_romfile.Platform); private RomLib m_romlib => App.nesRomLib;
public bool RomInfoReady => m_romfile != null && m_romfile.InfoReady; public bool RomInfoReady => m_romfile != null && m_romfile.InfoReady;

View File

@ -17,7 +17,16 @@ namespace AxibugEmuOnline.Client
get get
{ {
if (StarRom) return App.starRomLib; if (StarRom) return App.starRomLib;
else return App.GetRomLib(Platform); else
{
switch (Platform)
{
case RomPlatformType.Nes:
return App.nesRomLib;
default:
throw new System.NotImplementedException($"未实现的平台 {Platform}");
}
}
} }
} }

View File

@ -95,7 +95,7 @@ namespace AxibugEmuOnline.Client
SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}"); SetBaseInfo("--", $"<b>{hostNick}</b>的房间", $"{cur}/{max}");
SetIcon(null); SetIcon(null);
roomInfo.FetchRomFileInRoomInfo((room, romFile) => roomInfo.FetchRomFileInRoomInfo(roomInfo.GamePlatformType, (room, romFile) =>
{ {
if (room.RoomID != RoomID) return; if (room.RoomID != RoomID) return;

View File

@ -34,7 +34,7 @@ namespace AxibugEmuOnline.Client
} }
private static Dictionary<int, RomFile> s_RomFileCahcesInRoomInfo = new Dictionary<int, RomFile>(); private static Dictionary<int, RomFile> s_RomFileCahcesInRoomInfo = new Dictionary<int, RomFile>();
public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, Action<Protobuf_Room_MiniInfo, RomFile> callback) public static void FetchRomFileInRoomInfo(this Protobuf_Room_MiniInfo roomInfo, RomPlatformType platform, Action<Protobuf_Room_MiniInfo, RomFile> callback)
{ {
RomFile romFile; RomFile romFile;
@ -42,16 +42,20 @@ namespace AxibugEmuOnline.Client
{ {
callback.Invoke(roomInfo, romFile); callback.Invoke(roomInfo, romFile);
return; return;
} }
switch (platform)
App.StartCoroutine(App.httpAPI.GetRomInfo(roomInfo.GameRomID, (romWebData) => {
{ case RomPlatformType.Nes:
RomFile _romFile = new RomFile(0, 0); App.StartCoroutine(App.httpAPI.GetRomInfo(roomInfo.GameRomID, (romWebData) =>
_romFile.SetWebData(romWebData); {
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = _romFile; RomFile _romFile = new RomFile(0, 0);
_romFile.SetWebData(romWebData);
callback.Invoke(roomInfo, _romFile); s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = _romFile;
}));
callback.Invoke(roomInfo, _romFile);
}));
break;
}
} }
} }

View File

@ -2,7 +2,8 @@ using AxibugEmuOnline.Web.Common;
using AxibugProtobuf; using AxibugProtobuf;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using MySql.Data.MySqlClient; using MySql.Data.MySqlClient;
using static System.Runtime.InteropServices.JavaScript.JSType; using Mysqlx.Crud;
using System.Reflection.PortableExecutable;
namespace AxibugEmuOnline.Web.Controllers namespace AxibugEmuOnline.Web.Controllers
{ {
@ -15,7 +16,7 @@ namespace AxibugEmuOnline.Web.Controllers
_logger = logger; _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())) if (string.IsNullOrEmpty(tokenStr) || string.IsNullOrEmpty(tokenStr.Trim()))
{ {
@ -52,7 +53,7 @@ namespace AxibugEmuOnline.Web.Controllers
} }
[HttpGet] [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; long UID = 0;
if (TryDecrypToken(Token, out Protobuf_Token_Struct tokenData)) if (TryDecrypToken(Token, out Protobuf_Token_Struct tokenData))
@ -98,10 +99,7 @@ namespace AxibugEmuOnline.Web.Controllers
{ {
resp.resultAllCount = reader.GetInt32(0); resp.resultAllCount = reader.GetInt32(0);
resp.page = Page; resp.page = Page;
if (PageSize > 0) resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
else
resp.maxPage = 0;
} }
} }
} }
@ -109,7 +107,7 @@ namespace AxibugEmuOnline.Web.Controllers
string HotOrderBy = "ORDER BY playcount DESC, id ASC"; string HotOrderBy = "ORDER BY playcount DESC, id ASC";
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;"; query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType` FROM romlist where `Name` like ?searchPattern {platformCond} {GameTypeCond} {HotOrderBy} LIMIT ?offset, ?pageSize;";
using (var command = new MySqlCommand(query, conn)) using (var command = new MySqlCommand(query, conn))
{ {
// 设置参数值 // 设置参数值
@ -136,15 +134,7 @@ namespace AxibugEmuOnline.Web.Controllers
stars = reader.GetInt32(8), stars = reader.GetInt32(8),
ptype = reader.GetInt32(9), 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 (UID > 0)
{ {
if (CheckIsRomStar(data.id, UID)) if (CheckIsRomStar(data.id, UID))
@ -209,10 +199,7 @@ namespace AxibugEmuOnline.Web.Controllers
{ {
resp.resultAllCount = reader.GetInt32(0); resp.resultAllCount = reader.GetInt32(0);
resp.page = Page; resp.page = Page;
if (PageSize > 0) resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
resp.maxPage = (int)Math.Ceiling((float)resp.resultAllCount / PageSize);
else
resp.maxPage = 0;
} }
} }
} }
@ -220,7 +207,7 @@ namespace AxibugEmuOnline.Web.Controllers
string HotOrderBy = "ORDER BY playcount DESC, id ASC"; 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` ,mlist.`parentids` query = @$"SELECT romlist.id,romlist.`Name`,romlist.GameType,romlist.Note,romlist.RomUrl,romlist.ImgUrl,romlist.`Hash`,romlist.`playcount`,romlist.`stars`,romlist.`PlatformType`
from rom_stars from rom_stars
LEFT JOIN romlist on romlist.Id = rom_stars.romid LEFT JOIN romlist on romlist.Id = rom_stars.romid
where rom_stars.uid = ?uid where rom_stars.uid = ?uid
@ -253,15 +240,6 @@ LIMIT ?offset, ?pageSize;";
stars = reader.GetInt32(8), stars = reader.GetInt32(8),
ptype = reader.GetInt32(9), 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; data.isStar = 1;
@ -288,7 +266,7 @@ LIMIT ?offset, ?pageSize;";
Resp_RomInfo resp = new Resp_RomInfo(); Resp_RomInfo resp = new Resp_RomInfo();
MySqlConnection conn = SQLPool.DequeueSQLConn("NesRomList"); MySqlConnection conn = SQLPool.DequeueSQLConn("NesRomList");
{ {
string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType`,mlist.`parentids` FROM romlist where id = ?romid;"; string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars`,`PlatformType` FROM romlist where id = ?romid;";
using (var command = new MySqlCommand(query, conn)) using (var command = new MySqlCommand(query, conn))
{ {
// 设置参数值 // 设置参数值
@ -308,15 +286,6 @@ LIMIT ?offset, ?pageSize;";
resp.playcount = reader.GetInt32(7); resp.playcount = reader.GetInt32(7);
resp.stars = reader.GetInt32(8); resp.stars = reader.GetInt32(8);
resp.ptype = reader.GetInt32(9); 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]);
}
}
} }
} }
} }
@ -419,7 +388,7 @@ LIMIT ?offset, ?pageSize;";
public int stars { get; set; } public int stars { get; set; }
public int playcount { get; set; } public int playcount { get; set; }
public int isStar { get; set; } public int isStar { get; set; }
public List<int> parentRomIdsList { get; set; } = new List<int>();
} }
} }
} }

View File

@ -157,16 +157,15 @@ namespace AxibugProtobuf {
"bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS", "bBAFEhQKEFN3aXRjaFByb0NvbnRyb2wQBhIQCgxTd2l0Y2hKb3lDb24QBxIS",
"Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW", "Cg5YQk9YMzYwQ29udHJvbBAIEhIKDlhCT1hPTkVDb250cm9sEAkSEQoNUFNW",
"aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl", "aXRhQ29udHJvbBAKEhIKDldpaVVQYWRDb250cm9sEAsSFAoQV2lpUmVtb3Rl",
"Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKssBCg9Sb21QbGF0", "Q29udHJvbBAMEhYKEk5pbnRlbmRvM0RTQ29udHJvbBANKqIBCg9Sb21QbGF0",
"Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0", "Zm9ybVR5cGUSCwoHSW52YWxpZBAAEgcKA05lcxABEhEKDU1hc3Rlcl9TeXN0",
"ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95", "ZW0QAhINCglHYW1lX0dlYXIQAxIMCghHYW1lX0JveRAEEhIKDkdhbWVfQm95",
"X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT", "X0NvbG9yEAUSEQoNQ29sZWNvX1Zpc2lvbhAGEgsKB1NDXzMwMDAQBxILCgdT",
"R18xMDAwEAgSCgoGTkVPR0VPEBQSBwoDSUdTEBUSCAoEQ1BTMRAWEggKBENQ", "R18xMDAwEAgSCAoDQWxsEOcHKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9uZV9H",
"UzIQFxIICgNBbGwQ5wcqcAoNUm9vbUdhbWVTdGF0ZRISCg5Ob25lX0dhbWVT", "YW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQAhIN",
"dGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0ZRACEg0KCVdh", "CglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAFKk4K",
"aXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1lEAUqTgoRTG9n", "EUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jhc2VE",
"aW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFzZURlZmF1", "ZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90bzM="));
"bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, 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[] { 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[] {
@ -474,10 +473,6 @@ namespace AxibugProtobuf {
[pbr::OriginalName("Coleco_Vision")] ColecoVision = 6, [pbr::OriginalName("Coleco_Vision")] ColecoVision = 6,
[pbr::OriginalName("SC_3000")] Sc3000 = 7, [pbr::OriginalName("SC_3000")] Sc3000 = 7,
[pbr::OriginalName("SG_1000")] Sg1000 = 8, [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, [pbr::OriginalName("All")] All = 999,
} }

View File

@ -143,10 +143,6 @@ enum RomPlatformType
Coleco_Vision = 6; Coleco_Vision = 6;
SC_3000 = 7; SC_3000 = 7;
SG_1000 = 8; SG_1000 = 8;
NEOGEO = 20;
IGS = 21;
CPS1 = 22;
CPS2 = 23;
All = 999; All = 999;
} }