From 5b367eafe8cba5d486c2ab08af3b17afde44d3a8 Mon Sep 17 00:00:00 2001 From: "flyingscorpio@clevo" Date: Sat, 5 Nov 2022 14:31:29 +0100 Subject: [PATCH] Move architecture.md in rapport --- architecture.md | 14 ---------- rapport.tex | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 14 deletions(-) delete mode 100644 architecture.md diff --git a/architecture.md b/architecture.md deleted file mode 100644 index 653cb89..0000000 --- a/architecture.md +++ /dev/null @@ -1,14 +0,0 @@ -# Architecture fonctionnelle de l'application - -``` -Client 1 Serveur --------- send ------- push pop - Sender ---------------> ClientListener_1 --------> MessageBuffer <------- Dispatcher - Listener parse : - get client_n - | - get message - | -Client n | push --------- | - Sender send pop v - Listener <------------- ClientSender_n ----------------------------------> ClientPipe_n -``` diff --git a/rapport.tex b/rapport.tex index 9f154f9..2e2f79e 100644 --- a/rapport.tex +++ b/rapport.tex @@ -22,5 +22,76 @@ \tableofcontents \clearpage +\section{Description du projet, objectifs} + + Cette application multitâches, codée en C, est une illustration sur un cas concret des problématiques liées à~: + + \begin{itemize} + \item la synchronisation d'une application client/serveur + \item l'exclusion mutuelle + \item l'interblocage de processus + \end{itemize} + + Il s'agit d'une application de messagerie instantanée qui permet à plusieurs utilisateurs de communiquer par l'intermédiaire d'un serveur. + +\section{Architecture fonctionnelle} + + Le projet est composé de deux exécutables~: + + \begin{enumerate} + + \item \texttt{server}, qui utilise plusieurs threads~: + + \begin{itemize} + \item \texttt{Dispatcher}~: gère le parsing des messages et le routage vers les bonnes fonctions et les bons clients. + \item \texttt{ClientListener}~: est à l'écoute des messages entrants. + \item \texttt{ClientSender}~: envoie les messages au client. + \end{itemize} + + Le serveur crée une instance de \texttt{ClientListener} et une instance de \texttt{ClientSender} par client connecté. + + \item \texttt{client}, composé de deux processus~: + + \begin{itemize} + \item \texttt{Listener}~: est à l'écoute des messages en provenance du serveur, les imprime sur la sortie standard. + \item \texttt{Sender}~: lit les messages sur l'entrée standard et les envoie au serveur. + \end{itemize} + + \end{enumerate} + + Les fonctionnalités de haut niveau peuvent être schématisées de la manière suivante~: + + \begin{center} + \begin{tikzpicture} + \node[rectangle,fill=purple!20,thick,text depth=2cm,text width=2cm] (client1) at (-5,1) {\large Client$_1$}; + \node[text width=2cm,align=right] (sender1) at (-5,0.5) {Sender}; + \node[text width=2cm,align=right] (listener1) at (-5,0) {Listener}; + + \node[rectangle,fill=purple!20,thick,text depth=2cm,text width=2cm] (clientn) at (-5,-3) {\large Client$_n$}; + \node[text width=2cm,align=right] (sendern) at (-5,-3.5) {Sender}; + \node[text width=2cm,align=right] (listenern) at (-5,-4) {Listener}; + + \node[rectangle,fill=blue!20,thick,text depth=7cm,text width=8.8cm] (server) at (3,-1) {\large Serveur}; + \node (clientlistener1) at (0,0.5) {ClientListener$_1$}; + \node (clientsendern) at (0,-4) {ClientSender$_n$}; + + \node[rectangle,draw] (messagebuffer) at (5,0.5) {MessageBuffer}; + \node[rectangle,draw] (dispatcher) at (5,-1.5) {\parbox{4cm}{% + Dispatcher + \begin{itemize} + \item parse message + \item get client$_n$ + \end{itemize} + }}; + \node[rectangle,draw] (clientpipen) at (5,-4) {ClientPipe$_n$}; + + \draw[-latex] (sender1) -- (clientlistener1) node[above,midway]{\small send}; + \draw[-latex] (clientlistener1) -- (messagebuffer) node[above,midway]{\small push}; + \draw[-latex] (dispatcher) -- (messagebuffer) node[right,midway]{\small pop}; + \draw[-latex] (dispatcher) -- (clientpipen) node[right,midway]{\small push}; + \draw[-latex] (clientsendern) -- (clientpipen) node[above,midway]{\small pop}; + \draw[-latex] (clientsendern) -- (listenern) node[above,midway]{\small send}; + \end{tikzpicture} + \end{center} \end{document}