Benvenuto Ospite,
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:


Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-


Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum

Libreria Mame tools (per programmatori)

Problemi e soluzioni su configurazioni software, firmware
Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3328
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 35 volte
Grazie Ricevuti: 41 volte
Contatta:

Libreria Mame tools (per programmatori)

Messaggio da motoschifo »

Da qualche tempo ho rinnovato alcuni tool che lavorano il Mame e sto pian piano migrando verso github alcuni dei progetti sviluppati privatamente.
In particolare ho iniziato con ProgettoSnapsTool (che rimane privato e che aiuta Antopisa nel suo lavoro continuo di rilascio aggiornamenti delle risorse Mame) e con Mame Shrink.

Proprio per evitarmi continui copia/incolla e test di funzioni simili in più punti, ho deciso di scorporare quello che è il cuore di lettura dell'xml del Mame e di trattarlo come una libreria a parte. Inizialmente era stato reso un progetto condiviso, poi migrato a progetto vero e proprio per via di alcuni limiti strutturali, in seguito è stato inserito in un progetto di librerie e quindi scorporato anche su github.
Questo è l'indirizzo a cui poter reperire il sorgente: https://github.com/motoschifo/mame-tools.git

Al momento non mi interessa mettere in piedi build automatiche, mi basta usarlo come sorgente all'interno dei miei progetti e quindi referenziarlo una sola volta per tutti quanti, riuscendo anche a condividere le modifiche tra più progetti. Questa libreria conterrà anche i progetti di test, utili anche per capire come funzionano le chiamate.
In seguito ho aggiunto qui anche tutta la parte nuova SDK per ArcadeDatabase, che potrebbe servire anche ad altri progetti per integrare con poco sforzo attività di scraping delle informazioni del sito (tra l'altro anche lui si sta rinnovando per accettare questo tipo di chiamate).

Oltre a questo, in futuro potrei voler estendere il supporto a framework più moderni, come i consolidati .Net8/9 o il .Net10 di prossima uscita.
Ammetto che per lavoro i vecchi framework sono un lontano ricordo, ormai è tutto .Net9 ed in generale è difficile non aggiornarsi all'ultima release. Ma dato che noi abbiamo cabinati anche su sistemi Windows XP, per noi è invece difficile se non impossibile aggiornare.

Probabilmente questo post non è destinato al grande pubblico, se non si conosce il C# è un problema anche capire cosa fa il programma, ma potrebbe servire per avere una maggiore integrazione tra Mame e front-end.
Ad esempio oggi per leggere la lista dei giochi si utilizza un sistema spesso "casalingo" e appena si cambia versione del Mame le cose non funzionano. In questo progetto ho cercato di gestire tutte le release del Mame, proprio perchè il tool e il sito posso farlo.

A titolo di esempio, ecco come si presenta il progetto di test:

Codice: Seleziona tutto

#nullable enable
using System;
using System.Linq;
using System.Threading.Tasks;

namespace MameTools.Net48.Test;

internal class Program
{
    static void Main(string[] args)
    {
        // fix async task in net48
        RunAsync().GetAwaiter().GetResult();
    }

    static async Task RunAsync()
    {
        var mame = new Mame();
        await Imports.ImportMachines.LoadFromFile(mame, "gamelist.xml", progressUpdate: UpdateInfo);
        Console.WriteLine("Total machines: " + mame.Machines.Count);
        Console.WriteLine("Total parent machines: " + mame.Machines.Count(x => x.IsParentMachine));
        Console.WriteLine("Total working machines: " + mame.Machines.Count(x => x.Driver.Status == Machines.Drivers.Driver.DriverStatusKind.good));
    }

    static private void UpdateInfo(string? info) => Console.WriteLine($"Loading... {info}");
}
Per chi mastica un po' di C#, avere il totale dei giochi presenti o il totale dei giochi funzionanti con solo due righe di codice è tanta roba.

Le funzioni sono state pensate per un utilizzo "completo" del Mame e sicuramente cambieranno in futuro, ad ogni modo cercherò di non stravolgere troppo la logica o comunque di documentare bene eventuali passaggi distruttivi.
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase

Torna a “Miscellanea software”