Comme le montre le schéma d'interaction des blocs fonctionnels, les sorties d'un bloc sont les entrées d'un ou plusieurs autres. Ainsi la sortie fait du bloc qui la produit un producteur (de données) tandis que les entrées font du bloc qui les reçoit un consommateur (de données).
Si les traitements des blocs consommateur sont plus rapides que les traitements des blocs producteur qui les alimente, il n'y a aucune précaution à prendre. Toutefois en présence d'échange au travers d'un réseau (lecteur, émetteur et peut-être aussi selon l'architecture physique l'archiveur et le système de filtrage), les choses sont très différentes. Les traitements dépendent non seulement des caractéristiques des machines qui les exécutent mais aussi de la qualité et des latences des réseaux empruntés. Il n'est donc pas possible de s'attendre à ce que les vitesses de traitement des blocs fonctionnels soient compatibles.
En analysant notre diagramme des blocs fonctionnels, nous avons surtout deux noeuds d'étranglement aux extrémités de la chaîne de traitement :
Le reste de la chaîne de traitement peut être traité de manière synchrone par simple appel de méthodes d'interface. Nous devons donc spécifier un mécanisme de gestion d'une file d'attente.
Notez que la file d'attente approvisionnée par le lecteur est particulière car elle est accédée par deux deux blocs fonctionnels. Un fichier de cette file ne peut donc pas être supprimé tant que ces deux consommateurs ne l'ont pas traités.
Le rôle du lecteur est de livrer à l'archiveur et à l'analyseur les nouveaux courriels via une file d'attente qui joue le rôle de tampon d'adaptation des vitesses de traitement. Vis-à-vis de l'analyseur son rôle est d'être son pourvoyeur de courriels, Il est en relation plus étroite avec l'archiveur car il lui demande :
On en déduit que l'archiveur doit être actif avant que le lecteur ne puisse être instancié. De manière générale, tous les blocs fonctionnels doivent être actifs avant que le lecteur ne commence à produire. Il est donc activé en dernier.
Une classe effectuant le travail principal du lecteur vu comme un producteur a été prototypée (prototype curlimap). Ce prototype s'appuie uniquement sur la librairie curlemail et donc sur la librairie C sous-jacente libcurl :
QTextStream OUT = QTextStream(stdout, QTextStream::WriteOnly);
/**
* @brief main Prototype de lecture des nouveaux messages depuis un serveur IMAP.
* @param argc Nombre d'arguments de la ligne de commande.
* @param argv Liste des arguments de la ligne de commande.
* @return Statut de l'exécution.
*/
int main(int argc, char *argv[]) {
// Création de l'archiveur fichier
FileArchiver archiver(QDir("/var/mail"));
QCoreApplication a(argc, argv);
Log::getInstance().setFilter(LoggerLevel::info);
MailBox mbx = {MBX, FOLDER, HOST, PORT, USER, PASSWORD, TRANSPORT, AUTH};
QElapsedTimer timer;
timer.start();
EmailReader reader;
QList<ImapDataIndex> headers = reader.readNewEmails(mbx, &archiver);
int ms = timer.elapsed();
OUT << "Fin de récupération des nouveaux courriels : " << ms << " ms" << Qt::endl;
for (auto p = headers.begin(); p != headers.end(); ++p) {
OUT << QString("[%1] > ").arg(p->index) << Qt::endl;
OUT << Text::identText(QString(p->data), 4) << Qt::endl << Qt::endl;
}
return 0;
}
Dans cet exemple, nous avons développé une amorce d'archiveur de type système de fichier. Les code SHA256 sont conservés via les noms de fichier et les courriels sont stockées sous forme de fichiers d'extension (.eml). Ce prototype est déjà, en soi, un extracteur de messages efficace et facile de mise en oeuvre. Il pourrait être étendu à une application permettant le recueil des messages au format EML. Il a également été conçu pour vérifier le bon fonctionnement du lecteur avec les dossiers source envisagées. Voici un extrait de l'affichage console obtenu (liste des en-têtes) :
"14/05/2026 09:46:04,141Plus grande séquence trouvée : 90" "14/05/2026 09:46:07,472 Les en-têtes de ce message ne contiennent pas \\"Date:\\" ou \\"From:\\" - Message ignoré" "14/05/2026 09:46:07,472 \n A005 OK FETCH completed.\n " "14/05/2026 09:46:07,472 Nombre d'en-têtes retenues : 90" "14/05/2026 09:46:07,480 Fin de récupération des nouveaux courriels" Fin de récupération des nouveaux courriels : 4430 ms ... [5] > 041c9d4b9d1f1d123ff02343b2ab05d531d786ed4676e81feaf860b83d1f2168 Date: Fri, 20 Mar 2026 12:23:37 +0100 Message-ID: <1c5468ee-d283-4c12-9d35-47e5e84d3532@plumo.com> From: "Village" <admin@plumo.eu> Subject: Re: Suivi des interventions [6] > 2733b7490c368f5d8892f6bca7119a6b27594de78b2184cf09f02e7d6adcecd0 Date: Fri, 20 Mar 2026 07:40:41 +0100 Message-ID: <07ec16a0-9b0d-4a6a-a9cd-b5b5922c5173@plumo.com> From: "Village" <admin@plumo.eu> Subject: Suivi des interventions [7] > 99346e23920ce72df0e2636254864e0d9bf561a02aca351005494ea8daff8233 Date: Thu, 19 Mar 2026 17:41:45 +0100 Message-ID: <ec6848c0-8633-40c5-862d-20f593e6140e@plumo.com> From: "Village" <admin@plumo.eu> Subject: Suivi des interventions [8] > d5cb8e162038b046f394e3b0c7900adde3d541aba3e3f2635e8c9d6a1ae721e4 Date: Mon, 16 Mar 2026 09:46:24 +0100 Message-ID: <07f04e5e-2671-4979-a2a7-6f81f35e97b2@plumo.com> From: "Village" <admin@plumo.eu> Subject: Création de votre boîte courriel communale [9] > 15e3344904e8c4cf2e3ed073fa716e333f2c5e1fd7caaf486562fabfda480030 Date: Mon, 16 Mar 2026 10:10:40 +0100 Message-ID: <1c901084-1b9f-4a30-9166-6817682b82cc@plumo.com> From: "Village" <admin@plumo.eu> Subject: Création de votre boîte courriel communale [10] > 7d41238a81940c9f934e9de7c0492afccfebb406f7e6a56bc1b4f41605456358 Date: Mon, 16 Mar 2026 10:15:24 +0100 Message-ID: <25520e35-42ab-48ef-b9d1-7ab5c8b73a7a@plumo.com> From: "Village" <admin@plumo.eu> Subject: Création de votre boîte courriel communale [11] > 7afcdbdd613d26d4b63155bc4341908e664c07301ef4109036862a723d9fa583 Date: Mon, 16 Mar 2026 10:20:39 +0100 Message-ID: <57833bf8-bd68-44cd-9251-366d7802d1be@plumo.com> From: "Village" <admin@plumo.eu> Subject: Création de votre boîte courriel communale