Launcher Prototype Process Outline
1. client reaches out to server to get its psuedo manifest
2. client checks existing local files
3. client verifies resulting local file check against the psuedo manifest
4. if files are missing, client notifies server of missing files
5. server provides mirrors for missing files
5. client downloads files from mirrors
6. client verifies downloaded files against psuedo manifest
7. launch specific game command line
that can be done in the hashing, which i really think we should keep. if the hash of the file is not the same as the immediately checked hash of the file on the server, don't download. if the hash on the server is different than the one in the manifest, don't download. and this should be a master hash list on the server we are checking against, to prevent bad actors from changing a file, and changing the pseudo manifest to the new bad file. because the master hash can be encrypted
ideally a launcher would be pointed to a subdomain or ip not a url address..
updates.Myprivatecohserver.com or something
That information will come down in the pseudo manifest to be checked against that hashed encrypted master file on the server\\
(Regarding server psuedo manifest and file redirect)
it would be 2 different files sorta. but most likely a db queried dumped result..
in step 1.
Server only responds with File Name/Size/Hash data or something of this nature.. which could be flat file over all
in step 4
Server responds with only needed files (why send whole list if only the maincoh.exe was updated) which contains - Download location (would eventually be picked from a list of sources only the server knows exists, allowing server to control RNG loads to files not client side like tequila and creamsoda) - file name - file size - file hash also allowing server to manage mirror sources. an optional call back can be made by the launcher that says something like.. hey im getting 404 error for that file.. or hey im failing hash over and over for that file give me a new source location.
server could also track this issue and remove dead mirrors from its own list