Projet 2011-2012

Projet L3 MIAGE en Apprentissage

Soumission de demande de copies (ou déplacements) de fichiers en Clients-Serveur

Recommandations

Inclure les noms du binôme dans le nom de fichier.

Ne pas oublier de les mettre sur la première page.

Rappeler les objectifs du projet (ou ce que vous en avez compris)

Enumérer les parties du projet sur lesquelles vous vous êtes investi

Exemples :

  • client, serveur, threads, copie fichier ou dossier récursif,
  • parallélisme entre clients, parallélisme entre copies,
  • ordonnancement des copies d'un client,
  • ordonnancement des clients : copies inter-clients,
  • gestion des interruptions / reprise du serveur,
  • gestion des clients qui partent et reviennent,
  • gestion des demandes de copies côté serveur,
  • gestion des retours résultats des copies pour chaque client.

Pour chaque partie, décrire les grandes lignes de fonctionnement,
ainsi que les côtés les plus techniques (pour vous) dont vous aimeriez vous rappeler
et qui permettraient à d'autres de programmer le projet à partir de zéro.

Pour les parties non traitées, dire ce qu'il faudrait faire pour les améliorer
de telle manière à ce que cela permettent à d'autres de programmer ces parties rapidement.

Indiquer comment compiler, lancer et tester votre programme en préciser les scénarios à appliquer.

Conclure en mettant en valeur le travail effectué, les points résolus ou non.
Expliquer pourquoi ils ont été (ou sont) difficiles à traiter.

Ajouter dans la conclusion :

  • comment vous mèneriez le projet si vous deviez le refaire depuis zéro,
  • ce que ce genre de projet a pu vous apporter, éventuellement ce qui vous a ennuyé.

 

Quelques techniques

A partir de l'application cliente, l'utilisateur pourra soumettre des demandes de copies ou de déplacements de fichiers. Il pourra indiquer de manière interactive ou à l'aide de fichier texte (format à définir) :

  • un fichier par son nom,
  • un dossier,
  • un ensemble de fichiers d'un dossier à l'aide d'un filtre de type Windows ou de type expression régulière,
  • idem mais récursivement dans les sous-dossiers.(ici double = )

Exemple de fichier texte :

  • c:/dossier/fichier=Path_Destination
  • c:/dossier= Path_Destination
  • c:/dosssier/*.doc=Path_Destination
  • c:/dosssier/*.doc==Path_Destination

Si la demande est émise en interactif, le fichier texte correspondant est créé par l'application cliente.

A noter que le fichier texte pourra aussi être exprimé dans un format XML à définir (points bonus).

Les demandes sont envoyées au serveur qui les exécutera selon un ordonnancement à préciser. Le serveur doit pouvoir être interrompu et être capable de reprendre les copies là où elles en sont (Cf. seek). L'ordonnancement choisi tiendra compte des possibilités de parallélisme des unités source et destination (disque dur local, disque dur réseau, support amovible ainsi que de l'espace disponible sur le support cible : Cf. GetDriveType, GetLogicalDrives, GetVolumeInformation et GetDiskFreeSpaceEx sous Windows.

Attention ! Au niveau du client, on doit pouvoir prendre en compte les fichiers textes de demandes de copies ou déplacements selon différents formats (ascii, utf, unicode, etc). La séquence suivante extraite de demos/textedit peut aider à résoudre ce problème :

Au niveau du serveur, les demandes seront consignées dans des fichiers au format UTF-8. La séquence suivante est un exemple de relecture :

Dans le cas d'un déplacement, les fichiers source seront supprimés. Mais avec un envoi dans la corbeille. Exemple sous Windows :

On essaiera d'optimiser le cas où les fichiers doivent être déplacés dans la même unité (Windows) ou le même file system (Linux). Ainsi un simple déplacement sera moins couteux qu'une copie suivie d'une suppression dans la corbeille.

Lorsque la copie ou le déplacement sera effectué, un retour d'information sera envoyé à l'utilisateur. Il est attendu une proposition d'action pour les fichiers de type raccourcis sous windows. Il est aussi demandé de prendre en compte les fichiers système ou cachés.

La séquence suivante permet le passage en revue des entrées d'un dossier selon leur type :

Pour la copie des fichiers, on essaiera d'optimiser la taille du buffer, ici définie par MAX_BUFFER.

La copie doit pouvoir être interrompue, puis reprise ultérieurement, même en cas de redémarrage du système.

On prendra en compte le volume disponible du support destination source.
Sous Windows, pour connaître les unités disponibles et les volumes disponibles,
on pourra utiliser les appels systèmes GetDriveType et GetVolumeInformation

En cas d'espace disponible restreint, si l'utilisateur le demande, on envisagera néanmoins le début de la copie.
La copie s'arrêtera à une certaine saturation de l'espace destination. Elle reprendra lorsque de l'espace sera de nouveau disponible

On permattra le parallélisme des copies en distingant deux profils : la copie de petites fichiers et la copie de gros fichiers

On essaiera aussio de prendre en compte la rapidité ou la lenteur des supports source et destinaton
et en particilier le cas des clés USB. On calquera sur l'exemple de classes de travaux vus dans le cours.

On définira un ordonnancement des copies à faires pour chaque profil.
On évaluera les performances par rapport à l'ordonnancement de type FIFO.

 

Exemple de QTreeView modifié : customsortfiltermodel

L'exemple se trouve dans l'archive ( 2 formats mis à jour le 31 mai 2012 )

Voir aussi