2022-11-05 12:43:50 +01:00
|
|
|
\documentclass[a4paper,french,12pt]{article}
|
|
|
|
|
|
|
|
\title{%
|
|
|
|
\includegraphics[width=0.25\linewidth]{./img/efrei-logo.jpg}
|
|
|
|
\vfill
|
|
|
|
Projet de programmation Multitâches \\
|
|
|
|
{\Large Application de messagerie instantanée}
|
|
|
|
\vfill
|
|
|
|
}
|
|
|
|
\author{Adam Belghith, Tunui Franken, Maroua Ombaya}
|
|
|
|
\date{\small Dernière compilation~: \today{} à \currenttime}
|
|
|
|
|
|
|
|
\newcommand{\versionnumber}{1.0}
|
|
|
|
\usepackage{rapport}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
|
|
|
|
\maketitle
|
|
|
|
\thispagestyle{empty}
|
|
|
|
\clearpage
|
|
|
|
|
|
|
|
\tableofcontents
|
|
|
|
\clearpage
|
|
|
|
|
2022-11-05 14:31:29 +01:00
|
|
|
\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}
|
2022-11-05 12:43:50 +01:00
|
|
|
|
|
|
|
\end{document}
|