Système d’exploitation Chat Céline BONNEFOY Mathieu GUIDON-THIESSELIN Nicolas KACZMARSKI Cendrine MARTIN
Sujet Création d’un chat à l’aide de threads Client : chat -p <pseudo>
Sujet Serveur : server [-n <nbmaxi> -t <timeout> -debug] -n <nbmaxi> pour limiter le nombre de connexions simultanées à nbmaxi si l'option -n n'est pas renseignée, nbmaxi est fixé par défaut à 200. -t <timeout> pour déconnecter automatiquement un utilisateur en cas d'inactivité durant un laps de temps supérieur à timeout (en secondes). timeout défaut : 600 - debug pour voir les infos
Conception
Conception Structure Client : pthread_t id Entier sock Chaine pseudo
Conception Variables globales nombre de clients actuellement connectés Entier nb_clients = 0 nombre de clients maximum en simultané Entier maxUser = MAXUSER temps maximum d'inactivité Entier timeout = TIMEOUT mutex pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER tableau contenant tous les clients connectés au serveur struct_client *clients[MAXUSER-1]
Programmation Utilisation de Sémaphore d’exclusion mutuelle pour le tableau et la variable nbclient Un thread par client 1 thread pour le server : écoute 1 thread pour le server en mode debug (showinfo)
Programmation Commandes possibles /nick <nouveau pseudo> : change le pseudo de l'utilisateur. /msg <pseudo> <message> : envoi un message privé à l'utilisateur pseudo. /quit [<message>] : quitte le client en envoyant message aux autres utilisateur. /list : affiche la liste des pseudos des clients connectés au serveur. /help : affiche la liste des commandes disponibles.
Programmation
Serveur Algorithme Récupération des paramètres : Création du serveur nombre maximum de clients temps maximum d'inactivité avant la déconnexion Création du serveur TANTQUE (1) FAIRE acceptServer(server) Création d'un thread (chat) FINTANQUE
Serveur Fonctions Fonction acceptServer (sock : Entier ) : Entier attend une nouvelle connexion dès qu'un client se connecte renvoie l'identifiant du socket
Client Algorithme Vérification que le nombre maximum d’utilisateurs non atteint Vérification que le pseudo n'est pas déjà utilisé Stockage du client dans la structure struct_client Stockage de la structure client dans le tableau de client p (mutex) // début de la section critique clients[nb_clients] = temp nb_clients ← nb_clients + 1 v(mutex) // fin de la section critique EnvoiMessage (« Bienvenue », idClient) EnvoiMessageTous (« Nouveau client ») TANTQUE (1) FAIRE Vérification du dépassement du timeOut Lecture du message envoyé SI commande Alors appel commande SINON EnvoiMessageTous (msg, idClient) FINSI FINTQ
Conclusion Appliquer nos connaissances théoriques à un cas pratique Sujet chat intéressant : programme courant Threads: manière simple et claire de faire de la programmation en parallèle gestion des variables partagées plus complexe que les IPC Travailler en groupe Améliorer notre organisation.
Système d’exploitation Chat Céline BONNEFOY Mathieu GUIDON-THIESSELIN Nicolas KACZMARSKI Cendrine MARTIN