Ceci est un simulateur de processus sur un (ou plusieurs, suivant la version) serveur(s) de jeux.
Vous êtes au point de départ : en effet, la branche main
ne contient que la liste des versions disponibles dans les autres branches, listées ci-dessous.
Cette simulation sait effectuer les opérations suivantes :
- Créer une base de données (en variable globale), qui sera exploitée par la suite ;
- Consulter cette base soit pour
- afficher la liste intégrale des jeux disponibles, ou pour
- télécharger un ou plusieurs jeux proposés, un par un ;
- Effacer le jeu téléchargé - sans pour autant toucher à la base de données créée au lancement du serveur ;
- Lancer un jeu téléchargé, pour jouer en solo ou contre un autre joueur.
Pour les versions de v1 à v3, le client impose une exécution des opération en parallèle, afin de :
- Limiter la consommation de mémoire ;
- Réduire au maximum les temps d'exécution.
Le serveur doit pouvoir lancer des opérations non bloquantes en parallèle mais aussi être capable d’attendre la fin d’une opération bloquante.
Le serveur est toujours issu d’un seul code mais intègre le partage de mémoire tout en maintenant la possibilité de parallélisation des exécutions.
Chaque serveur est spécialisé dans une opération (search_server, list_server, play_solo_server, play_combat_server...) avec des codes différents du coup : le serveur principal, qui ne contient plus le code correspondant aux opérations, devra lancer le serveur dédié à chaque exécution d’une opération en lui transférant les arguments de celle-ci dont le code du jeu si nécessaire.
Les serveurs dédiés sont toujours actifs : le serveur principal va juste leur transférer les arguments des opérations à exécuter.
Les opérations seront exécutées sur une ou plusieurs machines distantes.
Conformément à la demande du client, l'application est compilée avec une seule commande, make
(voir Makefile). À moins d'avoir fait un make clean
préalablement, seuls les fichiers mis à jour et ceux qui dépendent de ces derniers sont (re)compilés.
Le nom de l'exécutable est games_sim
.