L'idea di base sarebbe quella di trovare la differenza tra il set di file attualmente installati sul computer di qualcuno e il più recente insieme di file che dovrebbero essere installati sul computer specifico di quella persona; e (una volta determinate tali differenze) scaricare qualsiasi nuovo file manchi e scartare i vecchi file obsoleti; speriamo in un modo "atomico" (che rende impossibile per qualcuno avviare il software nel momento sbagliato e ottenere una miscela di vecchio e nuovo).
Si noti che determinare "deve essere installato sul computer specifico di quella persona" può implicare una certa quantità di logica. Può dipendere da quale SO l'utente ha effettivamente (Windows XP a 32 bit, Windows 8 a 64 bit?), O quale CPU hanno (con / senza AVX?), O quale versione di DirectX o Java o qualsiasi altra cosa abbiano, o se sono utenti registrati o meno (ad esempio, solo utilizzando una versione gratuita con funzionalità limitate) o se la loro scheda video può gestire trame ad alto dettaglio o no, o se hanno abilitato varie funzioni opzionali, o ...
Si noti inoltre che lo stesso sistema potrebbe (dovrebbe?) essere utilizzato per l'installazione e la disinstallazione del software. Per l'installazione del software, il set di file attualmente installati è "nulla" (quindi l'auto-aggiornamento sa che è necessario scaricare tutto nel set di nuovi file). Per disinstallare il software, puoi semplicemente far finta che il set di file più recente da installare sia "niente" e scartare il set di file attualmente installati.
Inoltre; Vorrei un po 'di sicurezza e / o tolleranza ai guasti. Ad esempio, i file possono essere crittografati con la chiave privata del provider e l'auto-aggiornamento utilizza la chiave pubblica del provider per decrittografare i file. Forse ogni file scaricato ha un checksum MD5 e (dopo la decrittografia?) L'auto-updater assicura che i dati del file corrispondano effettivamente al checksum MD5.
Parliamo della larghezza di banda. I dati sono compressi? Se c'è un file MiB 123 e la nuova versione di quel file ha solo 12 byte diversi; scarichi l'intero file 123 MiB, o scarichi solo qualcosa che descrive le differenze (" inserisci 4 byte qui, sostituisci 6 byte lì, quindi aggiungi 2 byte alla fine ")?
Che cosa memorizza il server? Memorizza solo file semplici (e comprime, cripta, ecc. Ogni volta che il file viene scaricato); o il server memorizza i file pre-compressi e pre-crittografati, oltre a memorizzare le descrizioni pre-calcolate su come convertire i vecchi file in nuovi file (quindi se stiamo aggiornando il file 123 MiB il server può fornire rapidamente " inserire 4 byte qui, sostituire 6 byte lì, quindi aggiungere 2 byte alla fine "descrizione)?
Ora; diamo un'occhiata al tuo "refine.txt". I dettagli tecnici all'interno di "refine.txt" che descrivono come funzionerà effettivamente, coprono qualcosa di importante?