public static RomModel FindRom(RomData Data) { using (var db = new LiteDatabase(dbName)) { var col = db.GetCollection <RomModel>(); return(col.FindOne(r => r.PRGSHA == Data.PRGSHA && r.CHRSHA == Data.CHRSHA)); } }
public static async Task <RomInfo> GetRomInfo(RomData Data) { try { HttpClient client = new HttpClient(); client.BaseAddress = new Uri(baseAddress); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync($"Roms/{Data.PRGSHA}/{Data.CHRSHA}"); string responseBody = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <RomInfo>(responseBody)); } catch { return(null); } }
public static RomData GetRomInfo(string Path) { try { SHA1 sha = new SHA1CryptoServiceProvider(); using (var file = File.OpenRead(Path)) { byte[] headData = new byte[Marshal.SizeOf(typeof(NESHeader))]; file.Read(headData, 0, headData.Length); GCHandle handle = GCHandle.Alloc(headData, GCHandleType.Pinned); NESHeader header = (NESHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(NESHeader)); handle.Free(); int trainerSize = (header.Flags6 & (byte)Flags6.Trainer) > 0 ? 512 : 0; byte[] prgData = new byte[16384 * header.PRGSize]; byte[] chrData = new byte[8192 * header.CHRSize]; bool pal = (header.Flags9 & 1) == 1; file.Seek(16 + trainerSize, SeekOrigin.Begin); file.Read(prgData, 0, prgData.Length); file.Read(chrData, 0, chrData.Length); var hash = string.Concat(sha.ComputeHash(file).Select(b => b.ToString("X2"))); var prgHash = string.Concat(sha.ComputeHash(prgData).Select(b => b.ToString("X2"))); var chrHash = string.Concat(sha.ComputeHash(chrData).Select(b => b.ToString("X2"))); RomData data = new RomData { PRGSHA = prgHash, CHRSHA = chrHash }; return(data); } } catch { return(null); } }